日期:2014-05-19  浏览次数:20542 次

一個不知可不可以實現的問題Create Table
想在存儲過程中創建這樣一個臨時表,表的字段個數是根據變量來決定的。
例如想創建臨時表#TT(Tid,T1,T2,T3....TN,TType)T1到TN是根據日期天數來決定N的大小。
如從@Bdate到@Edate是 '2007/07/01 '到 '2007/07/05 '則創建的表@TT(Tid,T1,T2,T3,T4,T5,TType)。
如果@Bdate到@Edate是 '2007/07/01 '到 '2007/07/03 '則創建的表@TT(Tid,T1,T2,T3,TType).
請指教,如果不行的話還有沒有辦法實現相同的效果.謝謝!!

------解决方案--------------------
上面错了...create table 不能使用 @ 这个只能是定义 :declare
不过都差不多...

declare @Bdate datetime ,@Edate datetime
declare @Create varchar(1000),@Column varchar(4000),@sql varchar(8000)
declare @i int
select @i = 1
select @create = 'declare @tt table
( Tid int , ' ,@column = ' '
select @bdate = '2007-07-01 ' ,@edate = '2007-07-10 '
while(@i < datediff(day,@Bdate,@Edate) +1)
begin
select @column =@column + 't '+cast(@i as varchar(10)) + ' int , ' --这里的int 是类型,随你选了.
select @i =@i +1
end
select @column =@column + 'ttype int ) '
select @sql = @create+ @column
print @sql
--exec(@sql )
------解决方案--------------------
作用域的問題,這裡創建的臨時表只在EXEC內部有效。

改為創建實體表吧,

改為

create table tt