Sql server 为什么我的变量不改变它们的值?
我正在用T-SQL编写一个包含动态元素的大过程。为了让它简短,我只发布了重要的代码行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
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的值