1

存儲的結果我有一個存儲過程編寫存儲過程的動態SQL變量

DECLARE @AreaID AS INT 
DECLARE @DayPrior AS INT 
DECLARE @TableName AS VARCHAR(50) 
DECLARE @StoreQuery AS NVARCHAR(MAX) 
DECLARE @SQL_ExtractDlSql AS NVARCHAR(MAX) 
DECLARE @ParameterDefinition AS NVARCHAR(2000) 

SET @AreaID = 1 
SET @DayPrior = 1 
SET @TableName = 'Tbl_Lube' 

SET @SQL_ExtractDlSql = 'SELECT Download_SQL From 
         HDDDataPackage.dbo.tbl_HDD_DataDownloadSetting 
         Where [email protected] AND [email protected]' 

SET @ParameterDefinition = '@AreaID INT,@DayPrior INT,@TableName VARCHAR(50)' 

EXECUTE sp_executesql @SQL_ExtractDlSql, 
         @ParameterDefinition, 
         @AreaID, 
         @DayPrior, 
         @TableName 

PRINT @SQL_ExtractDlSql 

我上面的存儲過程,我得到我想要的東西上印刷,但不是這樣做,我想選擇的數據存儲爲一個變量。 那我該怎麼做是我聲明的變量@StoreSql並提出了一些修改成下面的SQL語句顯示:

變量聲明:

DECLARE @StoreSql AS NVARCHAR(MAX) 

修改了代碼:

我執行代碼,我得到錯誤必須聲明標量變量「@StoreSql」。

我完全不知道如何處理這個問題。任何人都可以提供幫助。另外,我是新來的sqlserver,是存儲過程的新手。

請不要猶豫,指出我的任何錯誤,任何..如邏輯或我從錯誤中學習等。

問候 LiangCk

回答

1

動態SQL字符串不能從外範圍內引用變量。你需要聲明它爲output參數

SET @ParameterDefinition = '@AreaID INT, 
          @DayPrior INT, 
          @TableName VARCHAR(50), 
          @StoreSql NVARCHAR(MAX) OUTPUT' 

EXECUTE sp_executesql @SQL_ExtractDlSql, 
         @ParameterDefinition, 
         @AreaID, 
         @DayPrior, 
         @TableName, 
         @StoreSql OUTPUT 
+0

謝謝@馬丁史密斯,我知道你的意思了。我已經得到了我的預期答案。 – Worgon