1.INSERT VALUES 语句
INSERT VALUES 语句可以将基于指定值的行插入表。
INSERT INTO dbo.Orders(orderid,orderdate) VALUES(10001,'20090212');
SQL Server 2008增强了VALUES 语句的功能,允许在一条语句中指定由逗号分隔开的多行记录。
例如
INSERT INTO dbo.Orders(orderid,orderdate)
VALUES
(10001,'20090212'),
(10001,'20100212')
上面这个语句是作为原子操作(atomic operation)而处理的,这意味着如果有任何一行在插入表时失败,那么语句中的所有行都不会插入表。
2.INSERT SELECT语句
INSERT SELECT 语句可以将一组由SELECT 查询返回的结果行插入目标表中。它的语法和 INSERT VALUES 语句非常相似,只不过这里是用SELECT查询代替了VALUES 子句。
INSERT INTO dbo.Orders(orderid,orderdate)
SELECT orderid,orderdate FROM dbo.Orders
WHERE country='US';
如果想在SQL Server 2008之前版本的SQL Server 中构建一个基于常量值的虚拟表,就不得不使用多个SELECT语句,由每个SELECT 语句返回一个基于常量值的行,再用UNION ALL集合运算把各行合并到一起。在INSERT SELECT 语句的应用中,用这种技术也能在一条语句中一次性插入多个基于常量值的行,而且这样的操作也是原子操作。
INSERT INTO dbo.Orders(orderid,orderdate)
SELECT 1007,'20090215' UNION ALL
SELECT 1008,'20090315'
3.INSERT EXEC 语句
INSERT EXEC 语句可以把存储过程或动态SQL批处理返回的结果集插入目标表。在语法和概念上INSERT EXEC语句和INSERT SELECT语句非常类似,只不过这里使用的不是SELECT 语句,而是要指定一个EXEC 语句。
INSERT INTO dbo.Orders(orderid,orderdate)
EXEC usp_getorders 'US'
4. SELECT INTO 语句
SELECT INTO 语句的作用是创建一个目标表,并用查询返回的结果来填充它。SELECT INTO语句不是一个标准的SQL语句,也就是说,它不是 ANSI SQL 标准的一部分。不能用这个语句向已经存在的表中插入数据。按照语法,只要简单地将 INTO<目标表名称>加到用于生成结果集的SELECT 查询的FROM子句前面就可以了。
SELECT orderid orderdate INTO dbo.Orders1 FROM dbo.Orders
目标表的结构和数据依赖于来源表。SELECT INTO语句会复制来源表的基本结构(包括列名、数据类型、是否允许为NULL及IDECTITY属性)和数据。不过,SELECT INTO语句不会从来源表中复制3样东西:约束、索引及触发器。如果目标表中需要这些东西,则需要亲自创建它们。
5. BULK INSERT 语句
BULK INSERT 语句用于将文件中的数据导入一个已经存在的表。在这个语句中,须要指定目标表、源文件及一些选项。可以指定的选项很多,包括数据文件的类型【例如,是字符格式(char),还是本机数据库类型(native)】、字段终止符和行终止符,所有这些选项都有完整的文档说明。
BULK INSERT dbo.Orders FROM 'd:a.txt'
WITH
(
DATAFILETYPE='char',
FIELDTERMINATOR=',',
ROWTERMINATOR=' '
);