使用 INSERT 和 SELECT 添加行
可以使用 INSERT 和 SELECT 语句通过下列方式将行添加到表:
- 使用 INSERT 语句直接指定值或通过子查询指定值。
- 在 SELECT 语句中使用 INTO 子句。
使用 INSERT
INSERT 语句可向表中添加一个或多个新行。在简化处理中,INSERT 具有以下格式:
INSERT [INTO] table_or_view [(column_list)] data_values
INSERT 语句将 data_values 作为一行或多行插入指定的表或视图。column_list 是列名的列表,列名以逗号分隔,用于指定为其提供数据的列。如果未指定 column_list,表或视图中的所有列都将接收到数据。
当 column_list 未指定表或视图中的所有列时,系统会将默认值(如果为列定义了默认值)或 NULL 插入未在列表中指定的任一列。未在列列表中指定的所有列必须允许空值或分配了默认值。
INSERT 语句不指定下列类型列的值,因为 SQL Server 2005 数据库引擎将为这些列生成值:
具有 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
将 INSERT 与 VALUE 子句和 SELECT 子查询配合使用
所提供的数据值必须与列的列表匹配。数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列的这些属性匹配。可以通过下列方式指定数据值:
使用
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 子查询插入行
使用 SELECT 和 INTO
若要通过另一个表中的值创建新表,可以使用 SELECT INTO
。例如:
SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM Person.Contact
WHERE Phone LIKE '492%'
有关详细信息,请参阅使用 SELECT INTO 插入行。
请参阅
其他资源
SELECT (Transact-SQL)
INSERT (Transact-SQL)
向表中插入数据