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