問題:在存儲過程中使用臨時表時,不Create臨時表就會報錯。 分析了下,總結了臨時表創建方式的區別。 創建臨時表有兩種方法: 方法一 create table #臨時表名 ( 欄位1 約束條件, 欄位2 約束條件, …… ) create table ##臨時表名 ( 欄位1 約束條件, 欄位2 ...
問題:在存儲過程中使用臨時表時,不Create臨時表就會報錯。
分析了下,總結了臨時表創建方式的區別。
創建臨時表有兩種方法:
方法一
create table #臨時表名
(
欄位1 約束條件,
欄位2 約束條件,
……
)
create table ##臨時表名
(
欄位1 約束條件,
欄位2 約束條件,
……
)
方法二
select * into #臨時表名 from 你的表;
select * into ##臨時表名 from 你的表;
註:以上的#代表局部臨時表,##代表全局臨時表
在存儲過程中使用時的區別:
存儲過程中有時會將sql語句先拼接成一個字元串,然後用exec執行,這時候如果在字元串中用第二種方式創建臨時表就會報錯(找不到該臨時表),只能用第一種方式創建好臨時表以後再將數據插入。
示例:
1.直接執行sql語句,兩種方式都可以
1 select Name into #tStudent from Test_student 2 select * from #tStudent
和
1 create table #tStudent 2 ( 3 Name varchar(100) 4 ) 5 6 insert into #tStudent select Name from Test_student 7 select * from #tStudent
執行結果一樣,如下圖
2.將sql語句拼接為字元串,則只能使用第一種方式
1 declare @outsql varchar(4000) 2 set @outsql = 'select sName into #tStudent from Test_student' 3 exec (@outsql) 4 select * from #tStudent
這樣會報錯,如下
1 declare @outsql varchar(4000) 2 create table #tStudent 3 ( 4 sName varchar(100) 5 ) 6 set @outsql = 'insert into #tStudent select Name from Test_student' 7 exec (@outsql) 8 select * from #tStudent
這樣可以正確執行,如下圖