⑴ 資料庫 sql中用SELECT INTO語句創建的臨時表在資料庫中看得到嗎
在MS SQL SERVER中臨時表不存儲在當前資料庫內,而是存儲在系統資料庫 tempdb 內;如果當用戶斷開連接時沒有除去臨時表,SQL Server 將自動除去臨時表。
⑵ SQL臨時表select * into ##test from 表A
這時會報錯。。。因為臨時表已經創建了,需要刪除臨時表才能執行語句。
⑶ SQL怎麼創建一個臨時表
創建臨時表
方法一:
create table #臨時表名(欄位1 約束條件,
欄位2 約束條件,
.....)
create table ##臨時表名(欄位1 約束條件,
欄位2 約束條件,
.....)
方法二:
select * into #臨時表名 from 你的表;
select * into ##臨時表名 from 你的表;
註:以上的#代表局部臨時表,##代表全局臨時表
查詢臨時表
select * from #臨時表名;
select * from ##臨時表名;
刪除臨時表
drop table #臨時表名;
drop table ##臨時表名;
⑷ select * into #temp from 表在T-SQL中可以建立臨時表,可是在VB中代碼要怎麼寫
用adodb組件創建connection對象,連接資料庫,exec上面的語句,然後只要connection不關閉,就能訪問這個臨時表。
⑸ SQL臨時表使用
1、創建方法:
方法一:
create table TempTableName
或
select [欄位1,欄位2,...,] into TempTableName from table
方法二:
create table tempdb.MyTempTable(Tid int)
說明:
(1)、臨時表其實是放在資料庫tempdb里的一個用戶表;
(2)、TempTableName必須帶「#」,「#"可以是一個或者兩個,以#(局部)或##(全局)開頭的表,這種表在會話期間存在,會話結束則自動刪除;
(3)、如果創建時不以#或##開頭,而用tempdb.TempTable來命名它,則該表可在資料庫重啟前一直存在。
2、手動刪除
drop table TempTableName
說明:
DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
(1)、當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表;
(2)、所有其它本地臨時表在當前會話結束時自動除去;
(3)、全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個Transact-SQL語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的Transact-SQL語句完成後,將自動除去此表。
⑹ SQL語句 可以這樣用嗎 select sum(abc) into 臨時表 from 表1,表2 where .......
可以加where。這樣會根據where所限定的條件篩選所需要的行到創建的臨時表中。
⑺ 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則將所有的結果全部顯示出來。
(7)sqlselectinto臨時表擴展閱讀
sql語言特點如下:
1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。
2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。
3、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。
⑻ SQL 怎樣把查詢的結果保存成一張臨時表
假如你的多表查詢是 select * from 表 where 條件
那麼你要的語句就是
select * into #temp from 表 where 條件
這里很簡單就可以完成 在你的查詢出來的列名 和from之間 這里是select *和from 你的可能不是
添加 into #你的臨時表名 其他都不做改動
⑼ SQL select語句為了將查詢結果放到臨時表中使用哪個關鍵字
直接: select * into #Content from 表 truncate table #Content --清空臨時表
drop table #Content --刪除臨時表還可以:create table #Content(UserID varchar(10),UserName varchar(10)) --創建臨時表insert into #Content select UserID,UserName from tabletruncate table #Content --清空臨時表
drop table #Content --刪除臨時表
⑽ SELECT INTO 語句可以創建本地或全局臨時表嗎
可以。
SQL Server臨時表有兩種類型:本地和全局。它們在名稱、可見性以及可用性上有區別。本地臨時表的名稱以單個數字元號 (#)
打頭;它們僅對當前的用戶連接是可見的;當用戶從 SQL Server 實例斷開連接時被刪除。全局臨時表的名稱以兩個數字元號 (##)
打頭,創建後對任何用戶都是可見的,當所有引用該表的用戶從 SQL Server 斷開連接時被刪除。
如果資料庫會話創建了本地臨時表 #temtable,則僅會話可以使用該表,會話斷開連接後就將該表刪除。如果創建了
##temtable全局臨時表,則資料庫中的任何用戶均可使用該表。如果該表在您創建後沒有其他用戶使用,則當您斷開連接時該表刪除。如果您創建該表後另一個用戶在使用該表,則SQL Server 將在您斷開連接並且所有其他會話不再使用該表時將其刪除。
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名table_name不能超過 116 個字元。
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
臨時表位於tempdb系統資料庫。
使用SELECT INTO語句可以把任何查詢結果集放置到一個新表中,還可以通過使用SELECT
INTO語句解決復雜的問題。例如,需要從不同數據源中得到數據集,如果一開始先創建一個臨時表,那麼在該表上執行查詢比在多表或多資料庫中執行查詢更簡單。
在使用SELECT INTO語句時,應該注意如下的事項和原則:
可以使用SELECT INTO語句創建一個表並且在單獨操作中向表中插入行。確保在SELECT INTO語句中指定的表名是惟一的。如果表名出現重復,SELECT
INTO語句將失敗。
可以創建本地或全局臨時表。要創建一個本地臨時表,需要在表名前加符號(#);要創建一個全局臨時表,需要在表名前加兩個符號(##)。本地臨時表只在當前的會話中可見,全局臨時表在所有的會話中都可見。
當使用者結束會話時,本地臨時表的空間會被回收。
當創建表的會話結束且當前參照表的最後一個Transact-SQL語句完成時,全局臨時表的空間會被回收。
使用SELECT INTO語句的基本語法如下:
SELECT <select_list>
INTO new_table
FROM {<table_source>}[,…n]
WHERE <search_condition>
例如:select * into #newTable from news where s_date>'2010-3-1'
利用SQL Server的全局臨時表防止用戶重復登錄
在我們開發商務軟體的時候,常常會遇到這樣的一個問題:怎樣防止用戶重復登錄我們的系統?特別是對於銀行或是財務部門,更是要限制用戶以其工號身份多次登入。
可能會有人說在用戶信息表中加一欄位判斷用戶工號登錄的狀態,登錄後寫1,退出時寫0,且登錄時判斷其標志位是否為1,如是則不讓該用戶工號登錄。但是這樣那勢必會帶來新的問題:如發生象斷電之類不可預知的現象,系統是非正常退出,無法將標志位置為0,那麼下次以該用戶工號登錄則不可登入,這該怎麼辦呢?
或許我們可以換一下思路:有什麼東西是在connection斷開後可以被系統自動回收的呢?對了,SQL
Server的臨時表具備這個特性!但是我們這里的這種情況不能用局部臨時表,因為局部臨時表對於每一個connection來說都是一個獨立的對象,因此只能用全局臨時表來達到我們的目的。
好了,情況已經明朗話了,我們可以寫一個象下面這樣簡單的存儲過程:
create procere gp_findtemptable -- 2001/10/26 21:36 zhuchao in nanjing
/* 尋找以操作員工號命名的全局臨時表
* 如無則將out參數置為0並創建該表,如有則將out參數置為1
* 在connection斷開連接後,全局臨時表會被SQL Server自動回收
* 如發生斷電之類的意外,全局臨時表雖然還存在於tempdb中,但是已經失去活性
* 用object_id函數去判斷時會認為其不存在. */
@v_userid varchar(6), -- 操作員工號
@i_out int out -- 輸出參數 0:沒有登錄 1:已經登錄
as
declare @v_sql varchar(100)
if object_id('tempdb.dbo.##'+@v_userid) is null
begin
set @v_sql = 'create table ##'+@v_userid+'(userid varchar(6))'
exec (@v_sql)
set @i_out = 0
end
else
set @i_out = 1
在這個過程中,我們看到如果以用戶工號命名的全局臨時表不存在時過程會去創建一張並把out參數置為0,如果已經存在則將out參數置為1。
這樣,我們在我們的應用程序中調用該過程時,如果取得的out參數為1時,我們可以毫不客氣地跳出一個message告訴用戶說」對不起,此工號正被使用!」
判斷方法範例:
select @sTmpWareA="tempdb..[##MARWareA"+ @ComputerName+"]"
if exists (select * from tempdb..sysobjects where id = object_id(@sTmpWareA) and
type = "U")
begin
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
exec( "drop table " )
end
else
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
@sTmpWareA 就是臨時表的名稱,過程中使用exec來操作