sqlserver建立臨時表

2021-06-21 02:59:28 字數 3102 閱讀 1471

建立臨時表

方法一:

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,並且每次新增一條記錄就會加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建立臨時表

建立臨時表 方法一 create table 臨時表名 欄位1 約束條件,欄位2 約束條件,create table 臨時表名 欄位1 約束條件,欄位2 約束條件,方法二 select into 臨時表名 from 你的表 select into 臨時表名 from 你的表 注 以上的 代表區域性臨...

sqlserver建立臨時表

建立臨時表 方法一 create table 臨時表名 欄位1 約束條件,欄位2 約束條件,create table 臨時表名 欄位1 約束條件,欄位2 約束條件,方法二 select into 臨時表名 from 你的表 select into 臨時表名 from 你的表 注 以上的 代表區域性臨...

Sql Server建立和使用臨時表

建立臨時表 方法一 create table 臨時表名 欄位1 約束條件,欄位2 約束條件,create table 臨時表名 欄位1 約束條件,欄位2 約束條件,方法二 select into 臨時表名 from 你的表 select into 臨時表名 from 你的表 注 以上的 代表區域性臨...