在动态 SQL 中使用 RETURN 退出存储过程



我正在尝试在我的存储过程中使用如下所示的东西,以便在满足某个条件时退出,但返回后的代码被执行。我的脚本有问题吗?

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 开发人员版上的输出是"返回之前",而不是"返回后"。 因此,回报似乎确实按预期工作。

最新更新