簡體   English   中英

在動態SQL中使用RETURN退出存儲過程

[英]Using RETURN in dynamic SQL to exit stored procedure

我正在嘗試在滿足某些條件的情況下在存儲過程中使用類似於以下的內容來退出,但是執行返回后的代碼。 我的腳本有問題嗎?

declare @DBName sysname
set @DBName ='Test_DB'
SET @sql='IF OBJECT_ID('''+@DBName +''',''U'') is null' + CHAR(10)+  'RETURN;' 
EXEC (@sql)

您可以使用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或類似的工具。

我測試了類似的腳本:

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上的輸出為“返回之前”,而不是“返回之后”。 因此,回報似乎確實按預期運作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM