在IF语句中的SELECT语句中使用表的变量



我已经寻找了一个解决方案,但答案不够具体,无法解决我的问题。

所以我有这个语句:

IF NOT EXISTS
(SELECT InternalRepositoryId FROM Tfs_GitInterface.dbo.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

当然也可以:

IF NOT EXISTS
(SELECT InternalRepositoryId FROM dbo.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

工作完全正常。我想提一下,dbo是另一个数据库的Schema。现在我想做这样的东西:

DECLARE @schema [nvarchar](400);
SET @schema = 'dbo';
IF NOT EXISTS
(SELECT InternalRepositoryId FROM @schema.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';
IF NOT EXISTS
(SELECT InternalRepositoryId FROM @schemaTable WHERE Name = @repositoryName)
BEGIN
    ...
END

现在我已经尝试了一些动态sql,但它不会工作没有错误:

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';
DECLARE @sql [nvarchar](4000);
SET @sql = 'SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ' + @repositoryName;
IF NOT EXISTS
(EXECUTE sp_executesql @sql)
BEGIN
    ...
END

然后我在EXECUTE处得到错误:"'EXECUTE'附近语法不正确。期待'(',或SELECT ' '和一些小错误。

有人知道怎么做吗?

编辑:IF语句是个大问题

你需要把整个IF NOT EXISTS放到你的动态sql中。

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';
DECLARE @sql [nvarchar](4000);
SET @sql = 'IF NOT EXISTS ( SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ''' + @repositoryName + ''' )' + CHAR(10) +
'BEGIN SELECT 1' + CHAR(10) + ' END';
EXECUTE sp_executesql @sql

Where select 1是实际语句

相关内容

  • 没有找到相关文章

最新更新