2013年8月30日 星期五

[2008] VALUES增強功能(Table Value Constructor)

VALUES關鍵字常見應用於INSERT指令上,以指定(暫存)將存入資料表之資料,MSSQL 2008版本起增強VALUES之功能及應用範圍,先前版本僅支援一筆資料之操作,此版本起開始支援多筆模式,可INSERT字句中同時指定存入多筆資料,並擴大應用範圍於SELECTUPDATEDELETEMERGE INTO等語法中使用,資料庫VALUES關鍵字所列舉之資料列產生並暫存於虛擬資料表中,提供後續INSERTSELECT(或相關)等參照使用

下表整理出可能之應用情境,過去多筆資料上之應用常需搭配UNION ALL語法產生或組合所需,2008版本則可用VALUES功能達成所需。
功能
SQL2008以下版本
SQL2008版本
Insert 1
INSERT … VALUES
INSERT … VALUES
Insert 多筆
INSERT … SELECT [UNION ALL]
INSERT … VALUES
暫存資料
SELECT [COLUMN LIST]
UNION ALL
SELECT [COLUMN LIST]
VALUES

前後版本對應語法及說明,整理列於下表:
功能
SQL2008以下
SQL2008()以上
用途/說明
Insert All
INSERT INTO #Seasons
(Season, Disp)
SELECT 'Spring', '春天'
UNION ALL
SELECT 'Summer', '夏天'
UNION ALL
SELECT 'Autumn', '秋天'
UNION ALL
SELECT 'Winter', '冬天'
INSERT INTO #Seasons
VALUES ('Spring', '春天')
      , ('Summer', '夏天')
      , ('Autumn', '秋天')
      , ('Winter', '冬天');
DML指令中同時INSERT多筆資料。

測試前需建立#Seasons
CREATE TABLE #Seasons
(
Season   varchar(20),
Disp     varchar(20)
);
Temp Table
SELECT 'Spring' Season
, '春天' Disp
UNION ALL
SELECT 'Summer', '夏天'
UNION ALL
SELECT 'Autumn', '秋天'
UNION ALL
SELECT 'Winter', '冬天'
SELECT *
FROM    
  (VALUES ('Spring', '春天')
         , ('Summer', '夏天')
         , ('Autumn', '秋天')
         , ('Winter', '冬天')
   ) AS Seasons(Season, Disp)
ORDER BY Disp
VALUES產生暫存資料表。

沒有留言:

張貼留言