table1表的字段名有w1、w2、w3、w4、w5…w25因程序经常要对字段值进行相加或不同记录比较运算,如:求某条记录的合计
for @i=1 to 25 
select @sum=@sum+ wi  (wi应如何写好呢?)即如何取得字段变量名,并取得变量名的值?请高手帮忙,TKS!

解决方案 »

  1.   

    select [name] from syscolumns where xtype='U' and object_id('表名')
    --这样?
      

  2.   


    select [name] from syscolumns where xtype='U' and object_id('表名')
    用这种方法可以取得表字段名,但如何取得其值呢?你可以用游标来给变量赋值
    用游标不太方便吧
      

  3.   

    create proc table_proc
    @type varchar(20) = null
    as
      if @type=null
      begin
          declare table_cursor scroll cursor
          for 
          select * from table
      end
      else
      begin
          declare table_cursor scroll cursor
          for
          select @type from table
      end
      declare @w1 int
      open price_cursor
      fetch first from table_cursor into @w1
      close table_cursor
      deallocate table_cursor
      
      exec table_proc 'w3' 
      或者 exec table_proc
    这是得到一个一条记录的字段值,得到其他可以写个while循环,但是有几个字段必须声明几个变量
    OK?只是提供方法
      

  4.   

    直接用select @aaa = sum(name) from tab_1 where ** = XX
    这样不行??
      

  5.   

    提供个思路
    declare @sql varchar(2000)
    declare @sum int
    declare @i int
    set @i = 0
    while(@i <=25)
    BEGIN
    set @i = @i + 1
    set @sql = 'select @sum=@sum + w' + cast(@i as varchar) + ' from table'
    exec(@sql)  --这里有点问题
    END
      

  6.   


    Declare @FieldStr varchar(2000)
    Declare @Sqlstr   varchar(2000)
    set @Fieldstr=''
    set @Sqlstr=''--得到字段表达式
    select @fieldstr=@fieldstr+'+'+name from syscolumns where id=object_id('orders')
    and  left([name],1)='w'  and cast(substring([name],1,2) as int) between 1 and 25  
    select @fieldstr=right(@fieldstr,len(@fieldstr)-1)--得到执行结果
    select @Sqlstr='Select '+@fieldstr+' from tablename'
    exec (@Sqlstr)