資料表值建構函式(Transact-SQL)
文章推薦指數: 80 %
VALUES 陳述式的VALUES 子句,或指定為MERGE 陳述式之USING 子句或FROM 子句中的 ... VALUES (
引數
VALUES
導入資料列值運算式清單。
每一個清單都必須以括號括住,並以逗點隔開。
每一個清單中指定的值數目都必須相同,而且值的順序必須與資料表中的資料行相同。
必須指定資料表中每一個資料行的值,或者資料行清單必須明確指定每一個內送值的資料行。
DEFAULT
強制DatabaseEngine插入定義給資料行的預設值。
如果資料行的預設值不存在,而且資料行允許Null值,就會插入NULL。
DEFAULT對識別欄位無效。
在資料表值建構函式中指定時,INSERT陳述式中只允許DEFAULT。
expression
這是一個常數、變數或運算式。
此運算式不能包含EXECUTE陳述式。
限制事項
用作衍生資料表時,資料列數目沒有限制。
作為INSERT...VALUES陳述式的VALUES子句時,資料列數目限制為1000個。
如果資料列數目超過最大值,就會傳回錯誤10738。
若要插入1000個以上的資料列,請使用下列其中一種方法:
建立多個INSERT陳述式
使用衍生資料表
使用bcp公用程式(.NETSqlBulkCopyclass、OPENROWSET(BULK...))或BULKINSERT陳述式來大量匯入資料
只允許使用單一純量值當做資料列值運算式。
不允許使用牽涉多個資料行的子查詢當做資料列值運算式。
例如,下列程式碼會產生語法錯誤,因為第三個資料列值運算式清單包含具有多個資料行的子查詢。
USEAdventureWorks2012;
GO
CREATETABLEdbo.MyProducts(NameVARCHAR(50),ListPriceMONEY);
GO
--Thisstatementfailsbecausethethirdvalueslistcontainsmultiplecolumnsinthesubquery.
INSERTINTOdbo.MyProducts(Name,ListPrice)
VALUES('Helmet',25.50),
('Wheel',30.00),
(SELECTName,ListPriceFROMProduction.ProductWHEREProductID=720);
GO
不過,您可以個別在子查詢中指定每個資料行,藉以重新撰寫此陳述式。
下列範例會成功地將三個資料列插入MyProducts資料表中。
INSERTINTOdbo.MyProducts(Name,ListPrice)
VALUES('Helmet',25.50),
('Wheel',30.00),
((SELECTNameFROMProduction.ProductWHEREProductID=720),
(SELECTListPriceFROMProduction.ProductWHEREProductID=720));
GO
資料類型
在多重資料列INSERT陳述式中指定的值會遵循UNIONALL語法的資料類型轉換屬性。
這會導致將不相符的類型隱含地轉換成較高優先順序的類型。
如果轉換不是支援的隱含轉換,就會傳回錯誤。
例如,下列陳述式會將整數值和字元值插入至類型為char的資料行中。
CREATETABLEdbo.t(aINT,bCHAR);
GO
INSERTINTOdbo.tVALUES(1,'a'),(2,1);
GO
當執行INSERT陳述式時,SQLServer會嘗試將'a'轉換成整數,因為資料類型優先順序指出整數的類型高於字元。
轉換會失敗,並傳回錯誤。
您可以適當且明確地轉換值來避免這個錯誤。
例如,可以依照以下方式撰寫上面的陳述式。
INSERTINTOdbo.tVALUES(1,'a'),(2,CONVERT(CHAR,1));
範例
A.插入多個資料列
下列範例會建立dbo.Departments資料表,然後使用資料表值建構函式將五個資料列插入此資料表。
由於提供了所有資料行的值,而且依照資料表中資料行的相同順序來列出它們,因此,不需要在資料行清單中指定資料行名稱。
USEAdventureWorks2012;
GO
INSERTINTOProduction.UnitMeasure
VALUES(N'FT2',N'SquareFeet','20080923'),(N'Y',N'Yards','20080923'),
(N'Y3',N'CubicYards','20080923');
GO
B.插入具有DEFAULT和NULL值的多個資料列
下列範例會示範在使用資料表值建構函式將資料列插入資料表時,如何指定DEFAULT和NULL。
USEAdventureWorks2012;
GO
CREATETABLESales.MySalesReason(
SalesReasonIDintIDENTITY(1,1)NOTNULL,
Namedbo.NameNULL,
ReasonTypedbo.NameNOTNULLDEFAULT'NotApplicable');
GO
INSERTINTOSales.MySalesReason
VALUES('Recommendation','Other'),('Advertisement',DEFAULT),(NULL,'Promotion');
SELECT*FROMSales.MySalesReason;
C.將多個值指定為FROM子句中的衍生資料表
下列範例會使用資料表值建構函式,在SELECT陳述式的FROM子句中指定多個值。
SELECTa,bFROM(VALUES(1,2),(3,4),(5,6),(7,8),(9,10))ASMyTable(a,b);
GO
--Usedinaninnerjointospecifyvaluestoreturn.
SELECTProductID,a.Name,Color
FROMProduction.ProductASa
INNERJOIN(VALUES('Blade'),('CrownRace'),('AWCLogoCap'))ASb(Name)
ONa.Name=b.Name;
D.在MERGE陳述式中將多個值指定為衍生的來源資料表
下列範例會使用MERGE,藉由更新或插入資料列來修改SalesReason資料表。
當來源資料表中的NewName值符合目標資料表(Name)中SalesReason資料行內的值時,就會更新目標資料表中的ReasonType資料行。
當NewName的值不相符時,來源資料列會插入目標資料表中。
來源資料表是一種衍生資料表,可使用Transact-SQL資料表值建構函式針對來源資料表指定多個資料列。
USEAdventureWorks2012;
GO
--Createatemporarytablevariabletoholdtheoutputactions.
DECLARE@SummaryOfChangesTABLE(ChangeVARCHAR(20));
MERGEINTOSales.SalesReasonASTarget
USING(VALUES('Recommendation','Other'),('Review','Marketing'),('Internet','Promotion'))
ASSource(NewName,NewReasonType)
ONTarget.Name=Source.NewName
WHENMATCHEDTHEN
UPDATESETReasonType=Source.NewReasonType
WHENNOTMATCHEDBYTARGETTHEN
INSERT(Name,ReasonType)VALUES(NewName,NewReasonType)
OUTPUT$actionINTO@SummaryOfChanges;
--Querytheresultsofthetablevariable.
SELECTChange,COUNT(*)ASCountPerChange
FROM@SummaryOfChanges
GROUPBYChange;
E.插入超過1000個資料列
下列範例示範如何使用資料表值建構函式作為衍生資料表。
這允許從單一資料表值建構函式插入超過1000個資料列。
CREATETABLEdbo.Test([Value]INT);
INSERTINTOdbo.Test([Value])
SELECTdrvd.[NewVal]
FROM(VALUES(0),(1),(2),(3),...,(5000))drvd([NewVal]);
另請參閱
INSERT(Transact-SQL)
MERGE(Transact-SQL)
FROM(Transact-SQL)
本文內容
延伸文章資訊
- 1values - 詞典釋義與在線翻譯 - 海词词典
beliefs of a person or social group in which they have an emotional investment (either for or aga...
- 2VALUES在劍橋英語詞典中的解釋及翻譯
values的意思、解釋及翻譯:the principles that help you to decide what is right and wrong, and how to act in...
- 3values - Yahoo奇摩字典搜尋結果
values · 查看更多. KK[ˋvæljʊz]; DJ[ˋvæljuz]. 美式. n. 價值標準;價值觀念;value的名詞複數. Dr.eye 譯典通. values. 值. PyDi...
- 4values中文, values是什麼意思:值… - 查查在線詞典
values中文::值…,點擊查查權威綫上辭典詳細解釋values的中文翻譯,values的發音,音標,用法和例句等。
- 5values-翻译为中文-例句英语
使用Reverso Context: cultural values, democratic values, core values, values and principles, univer...