前言
臨時表是用來暫時保存臨時數(shù)據(jù)(中間數(shù)據(jù)) 的一個數(shù)據(jù)庫對象, 它與普通表有些類似, 但又有很大區(qū)別。而在SQL Server中,使用INSERT INTO和SELECT INTO來填充表數(shù)據(jù)時,我們應(yīng)該選擇哪種方式會更好。本文將探討這兩種方法之間的差異、它們對臨時表的影響。
語法
1、INSERT INTO
INSERT INTO用于將數(shù)據(jù)插入到現(xiàn)有表中,因此使用該方法前需要提前創(chuàng)建表結(jié)構(gòu)。在創(chuàng)建表時,可以定義表的約束、索引和鍵等。此方法可以控制表的結(jié)構(gòu),并確保所有必要的元數(shù)據(jù)(如約束或索引)都是預(yù)定義的。
下面是使用語法:
-- tablename 數(shù)據(jù)插入的表
-- sourceTable 數(shù)據(jù)來源的表
INSERT INTO tablename (Column1, Column2,...)
SELECT Column1, Column2, ...
FROM sourceTable
-- 1、創(chuàng)建臨時表
CREATE TABLE #UserTemp (
Id INT PRIMARY KEY,
UserName NVARCHAR(100),
Email NVARCHAR(200),
Token NVARCHAR(500)
)
-- 2、往臨時表插入數(shù)據(jù)
INSERT INTO #UserTemp (Id, UserName, Email,Token)
SELECT UserId,UserName, Email,Token
FROM Users
-- 3、 查詢數(shù)據(jù)
SELECT * FROM #UserTemp
-- 刪除臨時表
DROP TABLE #UserTemp
2、SELECT INTO
SELECT INTO動態(tài)創(chuàng)建新表,并同時將數(shù)據(jù)插入表中,因此使用該方法前不需要提前創(chuàng)建表結(jié)構(gòu)。
下面是使用語法:
-- tablename 數(shù)據(jù)插入的表
-- sourceTable 數(shù)據(jù)來源的表
SELECT Column1, Column2,...
INTO tablename
FROM sourceTable
-- 1、創(chuàng)建臨時表,并往臨時表插入數(shù)據(jù)
SELECT UserId,UserName, Email,Token
INTO #Userinfo
FROM Users
-- 2、查詢數(shù)據(jù)
SELECT * FROM #Userinfo
差異
1、區(qū)別
2、使用場景
INSERT INTO更適合臨時表是因為可以利用元數(shù)據(jù)緩存、可以避免更改表結(jié)構(gòu),導(dǎo)致元數(shù)據(jù)緩存失效、在并中重用緩存元數(shù)據(jù)以提高性能。
小結(jié)
以上簡單地探討INSERT INTO與SELECT INTO內(nèi)容及其差異,了解并知道何時使用它們,可以使我們在不同的場景中選擇較好的方式。
閱讀原文:原文鏈接
該文章在 2024/12/30 15:15:43 編輯過