SQL SERVER臨時表的使用

2021-08-26 03:53:47 字數 2584 閱讀 1187

drop table #tmp --刪除臨時表#tmp

create table #tmp --建立臨時表#tmp

(id int identity (1,1) not null, --建立列id,並且每次新增一條記錄就會加1

wokno 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 約束中不能引用臨時表。

考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地建立索引時,或多個儲存過程或函式需要使用錶值時,臨時表很有用。通常,表變數提供更有效的查詢處理。

SQLServer 臨時表的使用

臨時表在sqlserver資料庫中,是非常重要的,下面就詳細介紹sql資料庫中臨時表的特點及其使用,僅供參考。臨時表與永久表相似,但臨時表儲存在tempdb中,當不再使用時會自動刪除。臨時表有兩種型別 本地和全域性。它們在名稱 可見性以及可用性上有區別。對於臨時表有如下幾個特點 本地臨時表 本地臨時...

sqlserver 的臨時表

臨時表有兩種型別 本地和全域性。對於臨時表有如下幾個特點 本地臨時表就是使用者在建立表的時候新增了 字首的表,其特點是根據資料庫連線獨立。只有建立本地臨時表的資料庫連線有表的訪問許可權,其它連線不能訪問該錶 不同的資料庫連線中,建立的本地臨時表雖然 名字 相同,但是這些表之間相互並不存在任何關係 在...

sqlserver 臨時表使用方法

建立臨時表 create procedure sp a try tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 as declare strsql nvarchar 4000 主語句 declare strtmp varchar 110...