MS SQL动态创建临时表

开发业务需求,需要对一个表作数据分析,由于数据量较大,而且分析时字段会随条件相应变化而变化。

因此计划先把数据转插入一个临时表,再对临时表的数据进行分析。

问题点是如何动态创建临时表。原先Insus.NET使用下面代码实现:

ExpandedBlockStart.gif View Code
 1  DECLARE  @s  NVARCHAR( MAX=  '
 2  IF OBJECT_ID( '' [dbo].[#Tb] '' ) IS NOT NULL
 3      DROP TABLE [dbo].[#Tb]    
 4  CREATE TABLE  [dbo].[#Tb] 
 5   (   
 6      [xxx] INT,
 7      [xxx] NVARCHAR(50),
 8       ' +  [ dbo ]. [ Column ]()  +  '  
 9   ) '  
10   EXECUTE( @s

 

上面代码中,有一个函数[dbo].[Column]()  是取得一系列动态字段。

其实,上面的代码一点问题也没有,是能正确动态创建一个临时表,但是接下来代码,我们无法再使用这个临时表[dbo].[#Tb] ,因为run第10行代码EXECUTE(@s)这动作之后,进程已经结束了。这样说法,动态创建出来的临时表,也没有什么意义了。

为了解决这个问题,Insus.NET想到了一个方法,算是能解决这个问题。既能动态创建,又能在创建之后,能继续使用这个临时表。 

ExpandedBlockStart.gif View Code
 1  IF  OBJECT_ID( ' [dbo].[#Tb] 'IS  NOT  NULL
 2      DROP  TABLE  [ dbo ]. [ #Tb ]    
 3  CREATE  TABLE   [ dbo ]. [ #Tb ] 
 4  (   
 5      [ xxx ]  INT,
 6      [ xxx ]  NVARCHAR( 50)
 7   ) 
 8    
 9  DECLARE  @tb  NVARCHAR( MAX=  ' ALTER TABLE [dbo].[#Tb] ADD  '  +  [ dbo ]. [ Column ]()  
10  EXECUTE( @tb)

 

只要细心看了一下,就是可以知道,可以先按正常创建这个临时表,再动态修改这个临时表的字段。这样做之后,程序run完第10行代码之后,就能再继续使用这个临时表,如:

SELECT  *  FROM  [ dbo ]. [ #Tb ]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值