把存儲過程結果集SELECT INTO到臨時表


http://www.cnblogs.com/soundcode/p/3544586.html

開發過程中,很多時候要把結果集存放到臨時表中,常用的方法有兩種。

一. SELECT INTO 
1. 使用select into會自動生成臨時表,不需要事先創建

select * into #temp from sysobjects
select * from #temp

 

2. 如果當前會話中,已存在同名的臨時表

select * into #temp from sysobjects

 

再次運行,則會報錯提示:數據庫中已存在名為 '%1!' 的對象。
Msg 2714, Level 16, State 6, Line 2
There is already an object named '#temp' in the database.

在使用select into前,可以先做一下判斷:

if OBJECT_ID('tempdb..#temp') is not null
drop table #temp

select * into #temp from sysobjects 
select * from #temp

 

3. 利用select into生成一個空表
如果要生成一個空的表結構,不包含任何數據,可以給定一個恆不等式如下:

select * into #temp from sysobjects where 1=2
select * from #temp

 

 

二. INSERT INTO
1. 使用insert into,需要先手動創建臨時表

1.1 保存從select語句中返回的結果集

create table test_getdate(c1 datetime)
insert into test_getdate select GETDATE()
select * from test_getdate

 

1.2 保存從存儲過程返回的結果集

復制代碼
復制代碼
create table #helpuser
(
UserName nvarchar(128),
RoleName nvarchar(128),
LoginName nvarchar(128),
DefDBName nvarchar(128),
DefSchemaName nvarchar(128),
UserID smallint,
SID smallint
)

insert into #helpuser exec sp_helpuser

select * from #helpuser
復制代碼
復制代碼

 

1.3 保存從動態語句返回的結果集

復制代碼
復制代碼
create table test_dbcc
(
TraceFlag varchar(100),
Status tinyint,
Global tinyint,
Session tinyint
)

insert into test_dbcc exec('DBCC TRACESTATUS')

select * from test_dbcc
復制代碼
復制代碼

 

對於動態SQL,或者類似DBCC這種非常規的SQL語句,都可以通過這種方式來保存結果集。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com