我试图在我的存储过程中使用类似下面的东西在满足某个条件时退出,但返回后的代码被执行。我的剧本有什么不对吗?
declare @DBName sysname
set @DBName ='Test_DB'
SET @sql='IF OBJECT_ID('''+@DBName +''',''U'') is null' + CHAR(10)+ 'RETURN;'
EXEC (@sql)
答案 0 :(得分:1)
您可以使用INSERT/EXEC
获取您要检查的动态对象的对象ID,如果该表没有记录不返回,则返回:
DECLARE @DBName sysname
SET @DBName = 'Test_DB'
SET @sql='SELECT OBJECT_ID('''+@DBName +''',''U'')'
DECLARE @Results TABLE (ObjectId INT)
INSERT @Results
EXEC (@Sql)
IF NOT EXISTS (SELECT * FROM @Results WHERE ObjectId IS NOT NULL)
RETURN
只是旁注,OBJECT_ID
不匹配数据库。您必须使用sys.databases
或类似。
答案 1 :(得分:0)
我测试了一个类似的脚本:
declare @DBName sysname
set @DBName ='Test_DB'
declare @sql varchar(8000)
SET @sql='IF OBJECT_ID('''+@DBName +''',''U'') is null' +
CHAR(10) +
'begin select ''before return'' return end select ''after return'''
EXEC (@sql)
SQL 2014 Developer Edition上此脚本的输出是“返回前”,而不是“返回后”。所以回报似乎按预期工作。