【问题标题】:Stored Procedure Dynamic SQL stored result in variable存储过程动态 SQL 将结果存储在变量中
【发布时间】:2011-10-20 10:04:22
【问题描述】:

我写了一个存储过程

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 的新手,存储过程的新手。

请不要犹豫指出我的任何错误,任何..例如逻辑等。我从错误中吸取教训。

问候 梁克

【问题讨论】:

    标签: sql-server-2008 variables stored-procedures scope dynamic-sql


    【解决方案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
    

    【讨论】:

    • 谢谢@Martin Smith,我知道你的意思了。我已经得到了预期的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2014-12-21
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多