創建sql臨時表
A. sql 創建臨時表
表名前使用一個#號,臨時表是局部的,使用兩個#號,臨時表是全局的,在斷開連接後sql會自動刪除臨時表
create table #a
(
id int,
name varchar(50)
)
insert into #a(id,name) values(1,'123')
select * from #a
drop table #a
臨時表除了名稱前多了#號外,其他操作與普通表完全一樣。
tb_Student是已建立好的表,我們通過臨時表temp把tb_Student表中的內容復制到tb_lizi表中,可以使用如下的代碼實現:
use mcf
SELECT * INTO #temp FROM tb_Student
SELECT * INTO tb_lizi FROM #temp
執行後斷開sql連接並重新連接(也可以退出sq再l重新啟動sql),發現tb_lizi表中的內容tb_Student表中的內容完全一致,實現了復制,同時我們沒有用代碼刪除temp表,但mcf資料庫中卻沒有temp表了,這是因為斷開連接時sql自動刪除了temp表
希望能解決您的問題。
B. sql臨時表創建後要手動刪除的么!
臨時表只在當前連接可見,當關閉連接時,Mysql會自動刪除表並釋放所有空間。如果你使用PHP腳本來創建MySQL臨時表,那每當PHP腳本執行完成後,該臨時表也會自動銷毀。
刪除MySQL 臨時表
默認情況下,當你斷開與資料庫的連接後,臨時表就會自動被銷毀。當然你也可以在當前MySQL會話使用 DROP TABLE 命令來手動刪除臨時表。
以下是手動刪除臨時表的實例:
from 樹懶學堂 - 一站式數據知識平台
C. 如何實現SQL Server臨時表的創建
創建
臨時表
方法一:
create
table
#臨時表名(欄位1
約束條件,
欄位2
約束條件,
.....)
create
table
##臨時表名(欄位1
約束條件,
欄位2
約束條件,
.....)
方法二:
select
*
into
#臨時表名
from
你的表;
select
*
into
##臨時表名
from
你的表;
註:以上的#代表局部臨時表,##代表全局臨時表
查詢臨時表
select
*
from
#臨時表名;
select
*
from
##臨時表名;
刪除臨時表
drop
table
#臨時表名;
drop
table
##臨時表名;
D. sql如何創建臨時表
網上其實很多相關文章,你可以搜一下,並不一定需要在這里提問。
轉帖一篇給你吧
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
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO
下面是結果集:
(1 row(s) affected)
Test1Col
-----------
1
(1 row(s) affected)
Test2Col
-----------
2
當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定
FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN
KEY 約束中不能引用臨時表。
考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。
E. SQL如何把查詢出來的多個表創建成一個臨時表
SELECT * INTO #TEMPTABLENAME
FROM
(
SELECT xxxxxx //你的查詢語句
)AS table_source //這個別名是必須的
WHERE xxxxxxxx //你需要的where判斷;
COMMIT或ROLLBACK後可自動刪除該臨時表
1、sql server使用select into會自動生成臨時表,不需要事先創建。
select * into #temp from sysobjects
2、sql要把多個表合並成一個要用到union或union all的關鍵字。
3、union或union all的區別是:union會自動壓縮多個結果集合中的重復結果,而union all則將所有的結果全部顯示出來。
(5)創建sql臨時表擴展閱讀
sql語言特點如下:
1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。
2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。
3、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。
F. sql中怎樣將查詢出來的結果創建成臨時表
其實視圖最典型的用途就是這樣了,做起來也比較容易,不過樓主要求臨時表,那麼就試試吧,一般來說數據量大的用錶快,不然就建視圖,不知道樓主是用什麼資料庫的呢? 如果是ms sql server的話可以:
SELECT * INTO #TEMPTABLENAME
FROM
(
SELECT xxxxxx //你的查詢語句
)AS table_source //這個別名是必須的
WHERE xxxxxxxx //你需要的where判斷
;
COMMIT或ROLLBACK後可自動刪除該臨時表
可以參考
等網址
G. sql中臨時表創建與使用
臨時表有兩種類型:
本地臨時表
以一個井號 (#) 開頭的那些表名。只有在創建本地臨時表的連接上才能看到這些表,鏈接斷開時臨時表即被刪除(本地臨時表為創建它的該鏈接的會話所獨享)或者這樣說局部臨時表是有當前用戶創建的,並且只有當前用戶的會話才可以訪問。
全局臨時表
以兩個井號 (##) 開頭的那些表名。在所有連接上都能看到全局臨時表或者這樣說只要這個全局臨時表存在,那麼用戶創建會話後對所有的用戶都是可見的。如果在創建全局臨時表的連接斷開前沒有顯式地除去這些表,那麼只要所有其它任務停止引用它們,這些表即被除去。當創建全局臨時表的連接斷開後,新的任務不能再引用它們(換句話說舊的任務還何以引用)。當前的語句一執行完,任務與表之間的關聯即被除去;因此通常情況下,只要創建全局臨時表的連接斷開,全局臨時表即被除去。
有以下方法可以創建
1)顯示地Creat table,如:
create table #tbl_Line(line varchar(10))
insert into #tbl_Line(line)
select distinct ltrim(rtrim(line_no))
from tbl_pas_scan_seq
where to_wc='A201'
這種方式的好處在於,可自行控制臨時表的結構。
2)用select into table,在建立的同時批量寫入數據,如:
select distinct ltrim(rtrim(line_no)) into #tbl_Line
from tbl_pas_scan_seq
where to_wc='A201'
這種方式的好處在於快捷,臨時表結構依賴於From子句中的相應表和欄位,當然select 子句中對欄位的處理也會有影響。
3) 利用with語句(sql server 2005+版本)
with test(bucode, bunamech)
as
(
select buCode,bunamech from pubBU
)
select * from TEST --- 此時的test就是臨時表,後續語句可以直接引用
H. mysql臨時表創建後存放在那裡怎樣給某一個資料庫創建臨時表
MySQL 需要創建隱式臨時表來解決某些類型的查詢。往往查詢的排序階段需要依賴臨時表。例如,當您使用 GROUP BY,ORDER BY 或DISTINCT 時。這樣的查詢分兩個階段執行:首先是收集數據並將它們放入臨時表中,然後是在臨時表上執行排序。
對於某些 UNION 語句,不能合並的 VIEW,子查詢時用到派生表,多表 UPDATE 以及其他一些情況,還需要使用臨時表。如果臨時表很小,可以到內存中創建,否則它將在磁碟上創建。MySQL 在內存中創建了一個表,如果它變得太大,就會被轉換為磁碟上存儲。內存臨時表的最大值由 tmp_table_size 或 max_heap_table_size 值定義,以較小者為准。MySQL 5.7 中的默認大小為 16MB。如果運行查詢的數據量較大,或者尚未查詢優化,則可以增加該值。設置閾值時,請考慮可用的 RAM 大小以及峰值期間的並發連接數。你無法無限期地增加變數,因為在某些時候你需要讓 MySQL 使用磁碟上的臨時表。
注意:如果涉及的表具有 TEXT 或 BLOB 列,則即使大小小於配置的閾值,也會在磁碟上創建臨時表。
I. 如何用PL/SQL創建一個臨時表
方法一:例子,過程里建臨時表的,並用游標返回臨時表中數據: create or replace procere ttable(i_cursor out ysq.aboutreport.t_cursor) is strCreateTable varchar2(500); vCount int; begin select count(*) into vCount from user_all_tables where lower(TABLE_NAME) = 'mytemp'; if vCount=0 then --EXECUTE IMMEDIATE ' drop table myTemp'; strCreateTable:='CREATE GLOBAL TEMPORARY TABLE myTemp (id VARCHAR(10),name varchar2(50)) ON COMMIT PRESERVE ROWS '; Execute immediate strCreateTable;--建表 end if; insert into mytemp values('1','sandy'); insert into mytemp values('2','may'); open i_cursor for select * from mytemp; commit; end ttable;方法二:create procere pro as str varchar2(100); begin str:='GLOBAL TEMPORARY TABLE myTemp ON COMMIT PRESERVE ROWS as select * from yourtable where 1=2'; Execute immediate str;--要有此許可權,grant create any table to 當前用戶 end;