首页 > 解决方案 > 将变量动态传递给 sp_executesql

问题描述

我有一个要求,其中一组变量已经初始化为一些默认值并用于其他目的。现在我试图动态传递一些变量,通常会从另一个表中查询变量并传递给一个 select 语句。

我现在不想使用所有变量。参数的数量可能会不时变化。

当我尝试以以下方式实现时,我得到的变量未定义。

下面是类似于逻辑的示例代码片段。

DECLARE @i_int1 INTEGER = 1
    ,@i_int2 INTEGER = 2
    ,@i_int3 INTEGER = 3
    ,@i_int4 INTEGER = 4
    ,@i_int5 INTEGER = 5
    ,@i_int6 INTEGER = 6
    ,@sql NVARCHAR(max) = ''
    ,@vcOutput NVARCHAR(max) = ''

BEGIN
    --set @vcOutput = CAST(@i_int1 AS nvarchar(MAX)) +','+ CAST(@i_int2 AS nvarchar(MAX))
    SET @vcOutput = '@i_int1,@i_int2'
    SET @sql = 'select ' + @vcOutput

    EXECUTE sp_executesql @sql;
END

标签: sqlsql-server

解决方案


您可以尝试以下查询。

DECLARE @i_int1 INTEGER = 1
    ,@i_int2 INTEGER = 2
    ,@i_int3 INTEGER = 3
    ,@i_int4 INTEGER = 4
    ,@i_int5 INTEGER = 5
    ,@i_int6 INTEGER = 6
    ,@sql NVARCHAR(max) = ''
    ,@vcOutput NVARCHAR(max) = ''

BEGIN
    --set @vcOutput = CAST(@i_int1 AS nvarchar(MAX)) +','+ CAST(@i_int2 AS nvarchar(MAX))
    SET @vcOutput = Convert(Varchar(10), @i_int1) + ',' + Convert(Varchar(10), @i_int2)
    SET @sql = 'select ' + @vcOutput

    --select @sql
    exec(@sql);
END

现场演示


推荐阅读