INSERT (SQL Server Compact)
在資料表中加入新資料列。
語法
INSERT [INTO]
table_name [ ( column_list ) ]
{ VALUES
( { DEFAULT | NULL | expression } [ ,...n] )
| derived_table
}
引數
[INTO]
可以在 INSERT 和目標資料表之間使用的選擇性關鍵字。table_name
用來接收資料的資料表名稱。( column_list )
要加入資料的一或多個資料行的清單。column_list 引數必須置於括號中並以逗號分隔。VALUES
引入所要插入的資料值清單。column_list (若已指定) 或資料表中的每一個資料行都必須有一個資料值。值清單必須置於括號中。DEFAULT
要求 Microsoft SQL Server Compact 必須使用資料行的已定義預設值。NULL
指出不明的值。NULL 值與空白值或零值不同。運算式
常數、變數或運算式。derived_table
傳回要插入資料表之資料列的任何有效 SELECT 陳述式。
備註
若要取代資料表中的資料,必須先使用 DELETE 陳述式清除現有的資料,然後再以 INSERT 載入新資料。若要修改現有資料列中的資料行值,請使用 UPDATE。
如果省略插入 column_list,則會隱含以他們序數位置的遞增順序,來識別資料表中所有資料行的插入資料行清單。
在資料表中的資料行只能於 column_list 中識別一次。
如果資料行不在 column_list 中,則 SQL Server Compact 必須能夠依據資料行的定義來提供值,否則便無法載入資料列。如果資料行符合下列條件,SQL Server Compact 便會自動提供資料行的值:
具有 IDENTITY 屬性。如此將會使用下一個累加識別值。
具有預設值。如此將會使用資料行的預設值。
可為 Null。如此將會使用 Null 值。
將外顯值插入識別欄位時,必須使用資料行清單和 VALUES 清單。如果 VALUES 清單中的值與資料表中資料行的順序不同,或是沒有資料表中每個資料行的值,則必須使用 column_list 明確指定用來儲存每個內送值的資料行。
使用 DEFAULT 指定資料行的值時,將會插入該資料行的預設值。如果該資料行的預設值不存在,而且資料行允許使用 Null 值,則此時會插入 NULL。DEFAULT 對識別欄位來說無效。
以 uniqueidentifier 資料類型建立的資料行會儲存特殊格式的 16 位元二進位值。SQL Server Compact 與識別欄位不同,前者會自動產生資料類型為 uniqueidentifier 之 ROWGUID 資料行的值。在插入作業期間,您可以針對 uniqueidentifier 資料行,使用資料類型為 uniqueidentifier 的變數,以及採用含連字號之 36 字元格式 <xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx> 的字串常數,其中的 <x> 是範圍從 0-9 或 a-f 的十六進位數字。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即為 uniqueidentifier變數或資料行的有效值。
插入資料列時的適用規則如下:
如果要將值載入具有 nchar、nvarchar 或 varbinary 資料類型的資料行,系統將依據下表的定義,判斷要填補或是截斷後端空白 (nchar 和 nvarchar 使用空格,而 varbinary 則使用零)。
資料類型
預設作業
nchar/binary
填補原始值,使其符合資料行的長度 (在 nchar 資料行中填補後端空白,而在 binary 資料行中則於行尾填補零)。
nvarchar
不會修剪插入 nvarchar 資料行之字元值中的後端空白,也不會將值填補成符合資料行的長度。
varbinary
不會修剪插入 varbinary 資料行之二進位值後端的零,也不會將值填補成符合資料行的長度。
如果 INSERT 陳述式違反了某項條件約束或規則,或者陳述式的值與資料行的資料類型不相容,則陳述式便會失敗,且 SQL Server Compact 也會顯示錯誤訊息。
如果 INSERT 以 SELECT 載入多個資料列,且若載入的值違反任何規則或條件約束,將導致完整的陳述式被完全停止,而且不會載入任何資料列。
注意
若要同時執行多個查詢,您必須在每個陳述式的結尾加入分號和新行字元。所有註解都應該以兩個連字號 (--) 為開頭。
程式碼範例
A. 使用簡單的 INSERT 陳述式
下列範例會在 Customers 資料表中加入新公司。系統會在沒有特定資訊可用之處插入 Null 值。
INSERT INTO Customers VALUES ('TPC', 'The Phone Company', 'John Kane', 'Owner', NULL, 'Forks', NULL, NULL, 'USA', NULL, DEFAULT);
B. 插入與資料行順序不同的資料
下列範例使用 column_list 和 VALUES 清單明確指定插入 Customers 資料表中每一個資料行的值。
INSERT INTO Customers ([Customer ID], [Company Name], Country, Phone)
VALUES ('WWI', 'Wide World Importers', 'USA', '206-555-0165');
C. 插入值少於資料行的資料
在下列範例中,Employees 資料表有三個資料行:EmployeeID、LastName 和 FirstName。下列陳述式會將 Ben Smith 加入 Employees 資料表中,但不會提供 EmployeeID 的值。
INSERT INTO Employees ([Last Name], [First Name]) VALUES ('Smith', 'Ben');
D. 使用衍生資料表插入資料
下列範例會使用 derived_table 來插入值。
INSERT INTO Table1 (col1, col2) SELECT (col1, col2) from Table2;
E. 插入日期值
下列範例說明如何插入日期值。
INSERT INTO Orders ([Order ID], [Customer ID], [Order Date])
VALUES (34, 'FRANS', '4/2/2004');