我正在尝试在我的存储过程中使用如下所示的东西,以便在满足某个条件时退出,但返回后的代码被执行。我的脚本有问题吗?
declare @DBName sysname
set @DBName ='Test_DB'
SET @sql='IF OBJECT_ID('''+@DBName +''',''U'') is null' + CHAR(10)+ 'RETURN;'
EXEC (@sql)
您可以使用
INSERT/EXEC
获取要检查的动态对象的对象 ID,如果表没有非 null 的记录,则返回:
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
或类似的东西。
我测试了一个类似的脚本:
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 开发人员版上的输出是"返回之前",而不是"返回后"。 因此,回报似乎确实按预期工作。