使用 INSERT 與 SELECT 加入資料列
您可以透過下列方式使用 INSERT 與 SELECT 陳述式將資料列加入資料表:
使用 INSERT 陳述式直接指定值或從子查詢指定值。
使用含有 INTO 子句的 SELECT 陳述式。
使用 INSERT
INSERT 陳述式可新增一或多個資料列到資料表中。簡化後的 INSERT 具有下列格式:
INSERT [INTO] table_or_view [(column_list)] data_values
INSERT 陳述式會將 data_values 視為一或多個資料列,插入至指定資料表或檢視中。column_list 是以逗號分隔的資料行名稱清單,可用來指定提供資料的資料行。若未指定 column_list,便由資料表或檢視的所有資料行來接收資料。
當 column_list 並未指定資料表或檢視中的所有資料行時,則會將預設值 (若資料行有定義預設值) 或 NULL 插入未在清單中指定的資料行中。資料行清單中未指定的所有資料行都必須允許 Null 值或是指派預設值。
因為 SQL Server Database Engine 會為下列類型的資料行產生值,所以 INSERT 陳述式不會為這些資料行指定值:
具有產生資料行值之 IDENTITY 屬性的資料行。
使用 NEWID 函數來產生唯一 GUID 值而具有預設的資料行。
計算資料行。
計算資料行是虛擬資料行,在定義上是由 CREATE TABLE 陳述式中的一或多個其他資料行所計算出來的運算式,例如:
CREATE TABLE TestTable (ColA INT PRIMARY KEY, ColB INT NOT NULL, ColC AS (ColA + ColB) * 2)
下列範例顯示如何將資料列插入含有會自動產生值或具有預設值的資料行之資料表中。INSERT 陳述式會插入包含部份 (而非全部) 資料行值的資料列。在最後一個 INSERT 陳述式中,並未指定任何資料行,只插入預設值。
USE AdventureWorks;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
column_1 int IDENTITY,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('my column default'),
column_3 timestamp,
column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4)
VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4)
VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2)
VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO
使用含有 VALUE 子句與 SELECT 子查詢的 INSERT
提供的資料值必須與資料行清單相符。資料值的數目必須與資料行的數目相同,且每個資料值必須符合對應資料行的資料類型、精確度 (Precision) 與小數位數 (Scale)。您可以利用下列方式指定資料值:
使用 VALUES 子句來指定一個資料列的資料值。例如:
INSERT INTO MyTable (PriKey, Description) VALUES (123, 'A description of part 123.')
如需詳細資訊,請參閱<使用 INSERT 和 Values 插入資料列>。
使用 SELECT 子查詢來指定一或多個資料列的資料值,例如:
INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView
如需詳細資訊,請參閱<使用 INSERT 和 SELECT 子查詢插入資料列>
搭配 INTO 使用 SELECT
若要利用其他資料表的值建立新資料表,您可以使用 SELECT INTO。例如:
SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM Person.Contact
WHERE Phone LIKE '492%'
如需詳細資訊,請參閱<使用 SELECT INTO 插入資料列>。