假设log表中有个日期字段名为datecreate proc GetLog
asBEGINdeclare @sql nvarchar(4000)set @sql ='select  [date]'select @sql = @sql +',sum(case when datediff(d,[date],''' + convert(varchar(10),[date]) +''') = 0 then 1 else 0 end) as ' + RouteName
from log
select @sql = @sql +' from log group by [date] 'exec (@sql)
end

解决方案 »

  1.   

    似乎很麻烦,存储过程里建表是可以
    我从Route表里把这些数据取出来
    作为另一张表的字段的时候
    我怎么知道数据类型是什么呢?
    难道再写个函数?if @name = '短信'
    begin  
    set   @type  =   'nvarchar(50)'
    end 
    return @type



    然后再在存储过程里再这样
    set @sql='alter table add '+@name+' '+@type+''
    exec(@sql)这样???
      

  2.   

    想来想去还是没想清楚
    LZ你这个存储过程是用在什么地方的?
    当Route表插入一条数据的时候?
    那么当Route表删除一条数据的时候呢?
      

  3.   


    declare  @sql varchar(2000)
    if not exists(select 1 from sysobjects where name ='log' and xtype ='u') 
    begin 
    set @sql =' create  table log(id int ,date datetime'
    select @sql = @sql +','+ routename +' int ' from routeset @sql = @sql + ',总计 int )'execute (@sql)
    end else 
    begin declare rs cursor  for select RouteName from Route
    where RouteName not in(
    select B.name from sysobjects as A 
    inner join syscolumns as B on A.id = B.id
    where A.name ='log' and A.xtype ='u' )

    declare @name nvarchar(20)
    open rs
    fetch next from rs into @name while @@fetch_status  = 0 

    begin

     exec('alter table log add ' + @name +' int ')
       fetch next from rs into @name
    end close rs
    deallocate rs
    end 
    这是总计不在最后的