星期四, 10月 06, 2022

[SQL] 資料表值建構函式

SQL Server 2008 推出的新語法 - 資料表值建構函式(Table Value Constructor),主要有兩種使用方式,分別為
  • 單一 insert 插入多筆資料 (insert values)
  • 衍伸資料表 (derived table)
單一 insert 插入多筆資料

該作法最常見,常用來取代 insert 資料時,不用一直反覆寫 insert into TableName 這段語法,只要在 values 後面用括號包住資料並用逗號分隔
USE AdventureWorks2019;  
GO  

DECLARE @Table_Value_Constructor TABLE (id int , LastName nchar(4) , FirstName nchar(4))

INSERT INTO @Table_Value_Constructor VALUES 
    (1 , N'張' , N'三'), 
    (2 , N'李' , N'四'),
    (3 , N'王' , N'五');  
GO  
衍伸資料表

values 接括號資料並用逗號分隔後產生 Table 名稱和欄位名稱
SELECT *
FROM 
    (	
        VALUES
        ('20221001', '20221002'),
        ('20221003', '20221004'), 
        ('20221005', '20221006'), 
        ('20221007', '20221008'), 
        ('20221009', '20221010') 
    ) AS Table_Value_Constructor(Date1, Date2);  -- 指定 Table 名稱和欄位名稱

[SQL] 資料表值建構函式

限制事項 from 官方文件
  • 用作衍生資料表時,資料列數目沒有限制。 
  • 作為 INSERT ... VALUES 陳述式的 VALUES 子句時,資料列數目限制為 1000 個。如果資料列數目超過最大值,就會傳回錯誤 10738。 若要插入 1000 個以上的資料列,請使用下列其中一種方法: 
    • 建立多個 INSERT 陳述式 
    • 使用衍生資料表
    • 使用 bcp 公用程式 ( .NET SqlBulkCopy class、OPENROWSET (BULK ...)) 或 BULK INSERT 陳述式來大量匯入資料

沒有留言:

張貼留言