我已经找到了解决方案,但答案并不足以解决我的问题。
所以我有这个声明:
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声明是一个大问题
答案 0 :(得分:1)
您需要将整个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
选择1是您放置实际陈述的地方