我正在使用动态元素在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
我的问题是,它始终打印相同的值。这些值是@ParmDefinitionKey
和@parmdefinitionval
传递给@currentcolumn_key1
和@Currentcolumn_val1
的值。
我希望你们能帮帮忙。
编辑:
现在它有效。以下是代码中的更改:
set @sqlval = 'select @zwischen1 = '+@currentcolumn_val+' from z_skm where id = @startid';
SET @ParmDefinitionval = N'@startid int,@zwischen1 nvarchar(50) OUTPUT' ;
exec sp_executesql @sqlval,@ParmDefinitionval,@startid=@start,@zwischen1=@currentval OUTPUT;
set @sqlkey ='select @zwischen2 = '+@currentcolumn_key+' from z_skm where id = @startid';
set @ParmDefinitionkey=N'@startid int, @zwischen2 nvarchar(50) OUTPUT';
exec sp_executesql @sqlkey,@ParmDefinitionkey,@startid=@start,@zwischen2=@currentkey OUTPUT;
我不知道为什么,但看起来不可能通过参数将dynamic_column传递给execute,它需要放入字符串之前..这对我来说完全没有意义。
答案 0 :(得分:3)
尝试更改您的查询,
set @sqlval = 'select '+@zwischen1+' = '+@currentcolumn_val1+'
from z_skm
where id = '+@startid;
我认为@ zwischen1是包含列名
的变量