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');