【问题标题】:parametrized sql with multiple parameters具有多个参数的参数化sql
【发布时间】:2012-06-18 12:19:40
【问题描述】:

我在我的 SQL 查询中遗漏了一些东西,请有人建议如何纠正它?这是我的 SQL:

declare @numItems int;
declare @value1 int;
declare @value2 int;
declare @currentValue int;
declare @counter int;
declare @qry nvarchar(max)

set @value1 = 5;
set @value2 = 10;

set @numItems = 2
set @counter=0

WHILE (@counter < @numItems)
BEGIN
    set @qry = 'set @currentValue = @value' + cast(@counter+1 as nvarchar(max)) + ';'   
    exec sp_executesql @qry, N'@currentValue int OUTPUT', @currentValue OUTPUT

    print @currentValue

    set @counter = @counter + 1;
END

我想要的是@currentValue 参数获取@value1 和@value2 的值并打印它们。 我不确定如何在 exec 语句中正确声明参数。我正在使用 SQL Server 2005。感谢您的帮助。

【问题讨论】:

    标签: sql dynamic parameterized


    【解决方案1】:
    declare @numItems int;
    declare @value1 int;
    declare @value2 int;
    declare @currentValue int;
    declare @counter int;
    declare @qry nvarchar(max)
    
    set @value1 = 5;
    set @value2 = 10;
    
    set @numItems = 2
    set @counter=0
    
    WHILE (@counter < @numItems)
    BEGIN
        set @qry = 'set @currentValue = @value' + cast(@counter+1 as nvarchar(max)) + ';'   
        exec sp_executesql @qry, 
                            N'@value1 int, @value2 int, @currentValue int OUTPUT', 
                            @value1=@value1,@value2=@value2, @currentValue = @currentValue OUTPUT
    
        print @currentValue
    
        set @counter = @counter + 1;
    END
    

    【讨论】:

    • +1 打败我。仅供参考@lekso。一个 Exec'd 查询 haa 它自己的范围。它只看到正在执行的 sql 中声明的项目。
    • 谢谢马丁,这绝对是我的问题的答案。有什么办法不在 exec 查询中硬编码值 @@value1 和 @@value2,例如,如果我有大量的 '@@value..' 参数?
    • @Tony Hopkins,也谢谢你。我读到的只是不太了解如何实现这一点。刚刚发现一篇有趣的文章/帖子:sommarskog.se/dynamic_sql.html
    • @lekso - 如果您有一个任意长的值列表,则将它们粘贴到表变量中,然后使用游标循环遍历表变量中的行。只需在参数列表中添加@value int, @currentValue int OUTPUT 并分配@value 从光标中获取的当前值。
    • 我想过一个表格,但特别是在我的情况下,最好坚持使用单独的变量。我也只有 8 个,所以你的解决方案可以完成这项工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多