Sql server 为什么我的变量不改变它们的值?

Sql server 为什么我的变量不改变它们的值?,sql-server,tsql,dynamic-sql,Sql Server,Tsql,Dynamic Sql,我正在用T-SQL编写一个包含动态元素的大过程。为了让它简短,我只发布了重要的代码行 declare.... BEGIN while @start <= @rowcount begin print @start print @rowcount set @sqlval = 'select @zwischen1 = @currentcolumn_val1 from z_skm where id = @star

我正在用T-SQL编写一个包含动态元素的大过程。为了让它简短,我只发布了重要的代码行

declare....

BEGIN

while @start <= @rowcount
begin
  print @start
  print @rowcount

  set @sqlval = 'select @zwischen1 = @currentcolumn_val1
                 from z_skm
                 where id = @startid';

  set @ParmDefinitionval = N'@currentcolumn_val1 nvarchar(500),
                             @startid int,
                             @zwischen1 nvarchar(50) OUTPUT';

  exec sp_executesql
    @sqlval,
    @ParmDefinitionval,
    @currentcolumn_val1 = @currentcolumn_val,
    @startid = @start,
    @zwischen1 = @currentval OUTPUT;

  print @currentval


  set @sqlkey ='select @zwischen2 = @currentcolumn_key1
                from z_skm
                where id = @startid';

  set @ParmDefinitionkey = N'@Currentcolumn_key1 nvarchar(500),
                             @startid int,
                             @zwischen2 nvarchar(50) OUTPUT';

  exec sp_executesql
    @sqlkey,
    @ParmDefinitionkey,
    @Currentcolumn_key1 = @currentcolumn_key,
    @startid = @start,
    @zwischen2 = @currentkey OUTPUT;

  print @currentkey

  set @start = @start + 1
  print'loop-end'

end

END
GO

我不知道为什么,但看起来不可能通过参数将动态_列传递到execute,它需要在..之前放入字符串中。。这对我来说毫无意义。

试着像这样更改您的查询

set @sqlval = 'select '+@zwischen1+' = '+@currentcolumn_val1+'
                 from z_skm
                 where id = '+@startid;

我认为@zwischen1是一个包含列名的变量

尝试这样更改您的查询

set @sqlval = 'select '+@zwischen1+' = '+@currentcolumn_val1+'
                 from z_skm
                 where id = '+@startid;

我认为@zwischen1是一个包含列名的变量

尝试这样更改您的查询

set @sqlval = 'select '+@zwischen1+' = '+@currentcolumn_val1+'
                 from z_skm
                 where id = '+@startid;

我认为@zwischen1是一个包含列名的变量

尝试这样更改您的查询

set @sqlval = 'select '+@zwischen1+' = '+@currentcolumn_val1+'
                 from z_skm
                 where id = '+@startid;



我认为@zwischen1是保存列名的变量

如果
@currentcolumn_-val1
@currentcolumn_-key1
应该表示动态列名,那么,'@currentcolumn_-val1'和'@currentcolumn_-key1'表示所有循环保持不变的动态列值。“@startid”变量发生变化@currentkey'和'@currentval'应打印select语句中的单行值。我不理解您的“动态列值”。如果
@currentcolumn_key1
包含列的名称,则您不能这样做,应使用链接中的解决方法。如果
@currentcolumn\u key1
不包含列的名称,则整个查询没有意义,可以替换为
set@var1=@var2
。Greg请参阅我的编辑。这就是你想教我的吗?史蒂夫,如果你想在评论中“ping”另一个用户,你可以使用如下“@”符号:@GSerg,查看我的编辑。这就是您试图向我解释的吗?如果
@currentcolumn\u val1
@currentcolumn\u key1
应该表示动态列名,那么“@currentcolumn\u val1”和“@currentcolumn\u key1”表示所有循环都保持不变的动态列值。“@startid”变量发生变化@currentkey'和'@currentval'应打印select语句中的单行值。我不理解您的“动态列值”。如果
@currentcolumn_key1
包含列的名称,则您不能这样做,应使用链接中的解决方法。如果
@currentcolumn\u key1
不包含列的名称,则整个查询没有意义,可以替换为
set@var1=@var2
。Greg请参阅我的编辑。这就是你想教我的吗?史蒂夫,如果你想在评论中“ping”另一个用户,你可以使用如下“@”符号:@GSerg,查看我的编辑。这就是您试图向我解释的吗?如果
@currentcolumn\u val1
@currentcolumn\u key1
应该表示动态列名,那么“@currentcolumn\u val1”和“@currentcolumn\u key1”表示所有循环都保持不变的动态列值。“@startid”变量发生变化@currentkey'和'@currentval'应打印select语句中的单行值。我不理解您的“动态列值”。如果
@currentcolumn_key1
包含列的名称,则您不能这样做,应使用链接中的解决方法。如果
@currentcolumn\u key1
不包含列的名称,则整个查询没有意义,可以替换为
set@var1=@var2
。Greg请参阅我的编辑。这就是你想教我的吗?史蒂夫,如果你想在评论中“ping”另一个用户,你可以使用如下“@”符号:@GSerg,查看我的编辑。这就是您试图向我解释的吗?如果
@currentcolumn\u val1
@currentcolumn\u key1
应该表示动态列名,那么“@currentcolumn\u val1”和“@currentcolumn\u key1”表示所有循环都保持不变的动态列值。“@startid”变量发生变化@currentkey'和'@currentval'应打印select语句中的单行值。我不理解您的“动态列值”。如果
@currentcolumn_key1
包含列的名称,则您不能这样做,应使用链接中的解决方法。如果
@currentcolumn\u key1
不包含列的名称,则整个查询没有意义,可以替换为
set@var1=@var2
。Greg请参阅我的编辑。这就是你想教我的吗?史蒂夫,如果你想在评论中“ping”另一个用户,你可以使用如下“@”符号:@GSerg,查看我的编辑。这就是你想向我解释的吗?没有@zwischen1应该包含sql的值statement@steve你试过这个问题了吗?嘿,多尼,谢谢你的回答。现在它起作用了。您可以在原始问题中看到我的更改。@steve如果正确,请接受我的答案,这有助于从未答复队列中删除该问题。我接受了您的答案,但想让您知道,在执行之前,并非所有动态值都需要放入“@sqlval”中。但是columnname是必需的。no@zwischen1应该包含sql的值statement@steve你试过这个问题了吗?嘿,多尼,谢谢你的回答。现在它起作用了。您可以在原始问题中看到我的更改。@steve如果正确,请接受我的答案,这有助于从未答复队列中删除该问题。我接受了您的答案,但想让您知道,在执行之前,并非所有动态值都需要放入“@sqlval”中。但是columnname是必需的。no@zwischen1应该包含sql的值statement@steve你试过这个问题了吗?嘿,多尼,谢谢你的回答。现在它起作用了。您可以在原始问题中看到我的更改。@steve如果正确,请接受我的答案,这有助于从未答复队列中删除该问题。我接受了您的答案,但想让您知道,在执行之前,并非所有动态值都需要放入“@sqlval”中。但是columnname是必需的。no@zwischen1应该包含sql sta的值