我写了一个存储过程
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 AreaId=@AreaID AND TableName=@TableName'
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)
修改了代码:
SET @SQL_ExtractDlSql = 'SELECT @StoreSql = Download_SQL From
HDDDataPackage.dbo.tbl_HDD_DataDownloadSetting
Where AreaId=@AreaID AND TableName=@TableName'
我执行了代码,我收到错误必须声明标量变量“@StoreSql”。
我完全不知道如何处理这个问题。任何人都可以提供帮助。除此之外,我是sqlserver的新手,是存储过程的新手。
请不要犹豫,指出我的任何错误,如逻辑等等。我从错误中吸取教训。
此致 LiangCk
答案 0 :(得分: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