declare @s nvarchar(4000)
declare @temp int,@f int,@autoid intselect @f=1
,@autoid=1

while @f<=30
begin
select @s='select @temp=f'+rtrim(@f)+' from inserted where autoid=@autoid'
,@f=@f+1
exec sp_executesql @s,N'@temp int out',@temp out
select 字段=N'f'+rtrim(@f-1),值=@temp
end

解决方案 »

  1.   

    declare @temp   nvarchar(100)
    declare @sql    nvarchar(4000)
    declare @autoid intset @sql = N'select @temp=f'+ @f + N' from inserted where autoid=@autoid'execute sp_executesql @sql,N'@temp nvarchar(1000) out,@autoid int',@temp out,@autoid = ...
      

  2.   

    提示:对象名 'Inserted' 无效。
    是不是动态sQL里不能对inserted进行操作呀?
      

  3.   

    inserted是觸發器里的表啊,你在存儲過程里用嗎?
      

  4.   

    --如果是在触发器中用,那么inserted是逻辑表,不能在动态语句中引用
    --可以用临时表来处理declare @s nvarchar(4000)
    declare @temp int,@f int,@autoid intselect @f=1
    ,@autoid=1
    select * into #i from inserted  where autoid=@autoid --缓存inserted表,以便在动态语句中引用

    while @f<=30
    begin
    select @s='select @temp=f'+rtrim(@f)+' from #i'
    ,@f=@f+1
    exec sp_executesql @s,N'@temp int out',@temp out
    select 字段=N'f'+rtrim(@f-1),值=@temp
    end