建立臨時表
方法一:
create table #
臨時表名(字段
1 約束條件,字段
2 約束條件
,.....)
create table ##
臨時表名(字段
1 約束條件,字段
2 約束條件
,.....)
方法二:
select * into #
臨時表名
from
你的表;
select * into ##
臨時表名
from
你的表;
注:以上的
#代表區域性臨時表,
##代表全域性臨時表
查詢臨時表
select * from #
臨時表名
;select * from ##
臨時表名
;刪除臨時表
drop table #
臨時表名
;drop table ##
臨時表名
;sql server
臨時表的使用
drop table #tmp --
刪除臨時表
#tmp
create table #tmp --
建立臨時表
#tmp
(id int identity (1,1) not null, --
建立列id,
並且每次新增一條記錄就會加
1wokno varchar(50),
primary key (id) --
定義id
為臨時表
#tmp
的主鍵);
select * from #tmp --
查詢臨時表的資料
truncate table #tmp --
清空臨時表的所有資料和約束
相關例子:
declare @wokno varchar(500) --
用來記錄職工號
declare @str nvarchar(4000) --
用來存放查詢語句
declare @count int --
求出總記錄數
declare @i int
set @i = 0
select @count = count(distinct(wokno)) from #tmp
while @i < @count
begin
set @str = 'select top 1 @wokno = wokno from #tmp where id not in (select top ' + str(@i) + 'id from #tmp)'
exec sp_executesql @str,n'@wokno varchar(500) output',@wokno output
select @wokno,@i --
一行一行把職工號顯示出來
set @i = @i + 1
end臨時表
可以建立本地和全域性臨時表。
本地臨時表僅在當前會話中可見;全域性臨時表在所有會話中都可見。
本地臨時表的名稱前面有乙個編號符
(#table_name)
,而全域性臨時表的名稱前面有兩個編號符
(##table_name)
。sql
語句使用
create table
語句中為
table_name
指定的名稱引用臨時表:
create table #mytemptable (cola int primary key)
insert into #mytemptable values (1)
如果本地臨時表由儲存過程建立或由多個使用者同時執行的應用程式建立,則
sql server
必須能夠區分由不同使用者建立的表。為此,
sql server
在內部為每個本地臨時表的表名追加乙個數字字尾。儲存在
tempdb
資料庫的
sysobjects
表中的臨時表,其全名由
create table
語句中指定的表名和系統生成的數字字尾組成。為了允許追加字尾,為本地臨時表指定的表名
table_name
不能超過
116
個字元。
除非使用
drop table
語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當儲存過程完成時,將自動除去在儲存過程中建立的本地臨時表。由建立表的儲存過程執行的所有巢狀儲存過程都可以引用此表。但呼叫建立此表的儲存過程的程序無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全域性臨時表在建立此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個
transact-sql
語句的生存週期內保持。換言之,當建立全域性臨時表的會話結束時,最後一條引用此表的
transact-sql
語句完成後,將自動除去此表。
在儲存過程或觸發器中建立的本地臨時表與在呼叫儲存過程或觸發器之前建立的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。巢狀儲存過程同樣可以建立與呼叫它的儲存過程所建立的臨時表同名的臨時表。巢狀儲存過程中對錶名的所有引用都被解釋為是針對該巢狀過程所建立的表,例如:
create procedure test2
ascreate table #t(x int primary key)
insert into #t values (2)
select test2col = x from #t
gocreate procedure test1
ascreate table #t(x int primary key)
insert into #t values (1)
select test1col = x from #t
exec test2
gocreate table #t(x int primary key)
insert into #t values (99)
goexec test1
go下面是結果集:
(1 row(s) affected)
test1col
-----------
1
(1 row(s) affected)
test2col
-----------
2
當建立本地或全域性臨時表時,
create table
語法支援除
foreign key
約束以外的其它所有約束定義。如果在臨時表中指定
foreign key
約束,該語句將返回警告資訊,指出此約束已被忽略,表仍會建立,但不具有
foreign key
約束。在
foreign key
約束中不能引用臨時表。
考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地建立索引時,或多個儲存過程或函式需要使用錶值時,臨時表很有用。通常,表變數提供更有效的查詢處理。
Sql Server建立和使用臨時表
建立臨時表 方法一 create table 臨時表名 欄位1 約束條件,欄位2 約束條件,create table 臨時表名 欄位1 約束條件,欄位2 約束條件,方法二 select into 臨時表名 from 你的表 select into 臨時表名 from 你的表 注 以上的 代表區域性臨...
SQL Server 索引的建立和使用
什麼是索引 拿漢語字典的目錄頁 索引 打比方 正如漢語字典中的漢字按頁存放一樣,sql server中的資料記錄也是按頁存放的,每頁容量一般為4k 為了加快查詢的速度,漢語字 詞 典一般都有按拼音 筆畫 偏旁部首等排序的目錄 索引 我們可以選擇按拼音或筆畫查詢方式,快速查詢到需要的字 詞 同理,sq...
SQL Server建立和使用臨時表(轉
建立臨時表 方法一 create table 臨時表名 欄位1 約束條件,欄位2 約束條件,create table 臨時表名 欄位1 約束條件,欄位2 約束條件,方法二 select into 臨時表名 from 你的表 select into 臨時表名 from 你的表 注 以上的 代表區域性臨...