在開發過程中,很多時候要把結果集存放到臨時表中,常用的方法有兩種。
一. SELECT INTO
1. 使用select into會自動生成臨時表,不需要事先建立
2. 如果目前會話中,已存在同名的臨時表
再次運作,則會報錯提示:資料庫中已存在名為 '%1!' 的對象。
Msg 2714, Level 16, State 6, Line 2
There is already an object named '#temp' in the database.
在使用select into前,可以先做一下判斷:
3. 利用select into生成一個空表
如果要生成一個空的表結構,不包含任何資料,可以給定一個恒不等式如下:
二. INSERT INTO
1. 使用insert into,需要先手動建立臨時表
1.1 儲存從select語句中傳回的結果集
1.2 儲存從存儲過程傳回的結果集
<a></a>
1.3 儲存從動态語句傳回的結果集
對于動态SQL,或者類似DBCC這種非正常的SQL語句,都可以通過這種方式來儲存結果集。
2. 不能嵌套使用insert exec語句
2.1 下面這個例子,嘗試儲存sp_help_job的結果集到臨時表,發生錯誤
傳回錯誤資訊:INSERT EXEC 語句不能嵌套。
Msg 8164, Level 16, State 1, Procedure sp_get_composite_job_info, Line 72
An INSERT EXEC statement cannot be nested.
展開錯誤資訊中的存儲過程:
發現裡面還有個INSERT INTO…EXEC的嵌套調用,SQL Server在文法上不支援。
2.2 可以用分布式查詢來避免這個問題,這種寫法在INSIDE SQL Server 2005中作者提到過
(1) 首先到打開伺服器選項Ad Hoc Distributed Queries
(2) 通過OPENROWSET連接配接到本機,運作存儲過程,取得結果集
使用windows認證
使用SQL Server認證
這樣的寫法,既免去了手動建表的麻煩,也可以避免insert exec 無法嵌套的問題。幾乎所有SQL語句都可以使用。
<a>本文轉自左正部落格園部落格,原文連結http://www.cnblogs.com/soundcode/p/3544586.html,如需轉載請自行聯系原作者</a>