有字段t300_1                            
t300_2                            
t300_3                            
t300_4                            
t300_5                            
t300_6                            
t300_7                            
t300_8                            
t300_9                            
t300_10                            
t300_11                            
t300_12                            
t300_13                            
                       
设置变量@dept
    set @dept=1
select 't300_'+@dept系统认为是否等同于@t300_1这个字段??请教。

解决方案 »

  1.   

    不等于
    --try
    exec('
    declare @dept int
    set @dept=1
    select ''t300_''+@dept')
      

  2.   

    exec('
    declare @dept int
    set @dept=1
    select ''t300_''+ltrim(@dept)')
    /*
    -----------------
    t300_1*/
      

  3.   

    --难道这个意思?
    declare @sql varchar(8000),@i int
    select @sql='select ',@i=1
    while @i<=30
      begin
         set @sql=@sql+'t300_'+ltrim(@i)+','+char(10)
         set @i=@i+1
      end
    print left(@sql,len(@sql)-2)+' from tb'
    /*
    select t300_1,
    t300_2,
    t300_3,
    t300_4,
    t300_5,
    t300_6,
    t300_7,
    t300_8,
    t300_9,
    t300_10,
    t300_11,
    t300_12,
    t300_13,
    t300_14,
    t300_15,
    t300_16,
    t300_17,
    t300_18,
    t300_19,
    t300_20,
    t300_21,
    t300_22,
    t300_23,
    t300_24,
    t300_25,
    t300_26,
    t300_27,
    t300_28,
    t300_29,
    t300_30 from tb
    */
      

  4.   

    不是。。是想:
    declare  @max_day  int   --每个月最大天数
    declare  @dept     int  
    declare  @date     nvarchar --把年月连起来
    select @dept=1if @month<10
    select @date=cast(@year as nvarchar)+'0'+cast(@month as nvarchar)
    else 
    select @date=cast(@year as nvarchar)+cast(@month as nvarchar)select @max_day=cast(datepart(dd,dateadd(m,1,@date+'01')-1) as int)while (@dept<=@max_day)
    begin 
    set cast('t60_'+cast(@dept as nvarchar) as nvarchar)=(select sum(xxx0 from tb group by part )
      

  5.   

    set cast('t60_'+cast(@dept as nvarchar) as nvarchar)=(select sum(xxx0 from tb group by part ) 重点是在这句
      

  6.   

    --不是。。是想:
    declare @year int,@month int,@sql varchar(2000)
    declare  @max_day  int   --每个月最大天数
    declare  @dept     int  
    declare  @date     nvarchar(10) --把年月连起来
    select @dept=1
    set @year=2010
    set @month=6if @month<10
    select @date=cast(@year as nvarchar)+'0'+cast(@month as nvarchar)
    else 
    select @date=cast(@year as nvarchar)+cast(@month as nvarchar)select @max_day=cast(datepart(dd,dateadd(m,1,@date+'01')-1) as int)while (@dept<=@max_day)
    begin 
    --这句没看懂 ,k看看是不是这样
    set @sql = 'update tb set '+convert(nvarchar(20),'t60_'+cast(@dept as nvarchar))+'=(select sum(xxx0) from tb group by part )'
    exec(@sql)
    set @dept=@dept+1
    end
      

  7.   

    对大哥的理解能力佩服的五体投地。
    不知什么时候我也能有这种理解能力。。
    那句的意思是语句是错的(只是想表达我的意思写的)。。想实现对字段循环赋值 
    t300_1=字段值
    t300_2=字段值
    t300_3=字段值
      

  8.   

    我也不太明白楼主的意思!我理解的意思怎么是在
    select 't300_'+@dept查询的时候等同于select 't300_1'
    好家伙!SQL里面能在查询的时候直接声明变量???
    查询时't300_'+@dept等于't300_1'???