我已经寻找了一个解决方案,但答案不够具体,无法解决我的问题。
所以我有这个语句:
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是实际语句