1.1 INSERT VALUES
IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL DROP TABLE dbo.Orders;
CREATE TABLE dbo.Orders
(
orderid INT NOT NULL
CONSTRAINT PK_Orders PRIMARY KEY,
orderdate DATE NOT NULL
CONSTRAINT DFT_orderdate DEFAULT(SYSDATETIME()),
empid INT NOT NULL,
custid VARCHAR(10) NOT NULL
);
INSERT INTO dbo.Orders(orderid, orderdate, empid, custid)
VALUES(10001, '20090212', 3, 'A');
INSERT INTO dbo.Orders(orderid, empid, custid)
VALUES(10002, 5, 'B');
INSERT INTO dbo.Orders
(orderid, orderdate, empid, custid)
VALUES
(10003, '20090213', 4, 'B'),
(10004, '20090214', 1, 'A'),
(10005, '20090213', 1, 'C'),
(10006, '20090215', 3, 'C');
对于增强的values子句,还有一点就是可以将其作为表值构造函数以标准方式构建一个派生表,示例如下。
SELECT *
FROM ( VALUES
(10003, '20090213', 4, 'B'),
(10004, '20090214', 1, 'A'),
(10005, '20090213', 1, 'C'),
(10006, '20090215', 3, 'C') )
AS O(orderid, orderdate, empid, custid);
1.1.2 INSERT SELECT
INSERT SELECT 语句插入一个有SELECT查询返回的行集到目标表中。其语法类似于INSERT VALUES语句,不同的是,你可以指定一个SELECT查询。示例如下。
INSERT INTO dbo.Orders(orderid, orderdate, empid, custid)
SELECT orderid, orderdate, empid, custid
FROM Sales.Orders
WHERE shipcountry = 'UK';
1.2.3 INSERT EXEC语句
使用INSERT EXEC语句可以将存储过程或动态SQL批处理返回的结果插入到目标表中。
IF OBJECT_ID('Sales.usp_getorders', 'P') IS NOT NULL
DROP PROC Sales.usp_getorders;
GO
CREATE PROC Sales.usp_getorders
@country AS NVARCHAR(40)
AS
SELECT orderid, orderdate, empid, custid
FROM Sales.Orders
WHERE shipcountry = @country;
GO
EXEC Sales.usp_getorders @country = 'France';
INSERT INTO dbo.Orders(orderid, orderdate, empid, custid)
EXEC Sales.usp_getorders @country = 'France';
1.1.4 SELECT INTO
SELECT INTO语句是一个非标准的T-SQL语句,它使用查询的结果集创建并填充表。
IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL DROP TABLE dbo.Orders;
SELECT orderid, orderdate, empid, custid
INTO dbo.Orders
FROM Sales.Orders;
目标表的结构和数据是基于源表的。SELECT INTO语句从源表中复制基础结构(列名称、类型、为空性和IDENTITY属性)和数据。
有4中情况,语句不会从源表复制: 约束、索引、触发器he和和权限。如果目标表中需要这些东西,则需要单独创建它们。
1.1.5 BULK INSERT
可以使用BULK INSERT语句jia将来自文件的数据插入到一个现有表中,在语句中指定mu'b目标表、源文件和选项。
可以指定多个选项,包括数据文件类型(例如 char 或 native)、字段终止符、行终止符和其他所有文件选项。
例如,下面的代码批量插入文件 c:\temp\orders.txt的内容到dbo.Orders表中,指定数据文件类型为 char,字段终止符为逗号,行终止符为换行符。
BULK INSERT dbo.Orders FROM 'c:\temp\orders.txt'
WITH
(
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO