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

时间:2014-11-19 10:50:08

标签: 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 = @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,它需要放入字符串之前..这对我来说完全没有意义。

1 个答案:

答案 0 :(得分:3)

尝试更改您的查询,

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

我认为@ zwischen1是包含列名

的变量