一、Microsoft® SQL Server™ 支持使用下列方法向表中添加数据:
1、带有下列两个选项之一的 INSERT 语句:
VALUES 子句,将特定值集合插入一行。
SELECT 子查询,用来插入选自表或视图中的数据。
2、数据库应用程序接口 (API)
处理结果集时插入数据的支持选项。
3、WRITETEXT 语句和几个数据库 API 选项
可用于向一行添加 ntext、text 或 image 数据。
4、数据库 API(ADO、OLE DB、ODBC 和 DB-Library)中的函数
支持在一行中添加新的 ntext、text 和 image 数据。
5、SELECT INTO 语句
可用于创建一个包含 SELECT INTO 结果集所有行的新表。
6、用于插入许多行的大容量复制组件
指定大容量复制操作主要有三种方法:
大容量复制程序(bcp 实用工具),一个命令行提示实用工具。
用在 Transact-SQL 批处理、存储过程和触发器中的 BULK INSERT 语句。
用于 OLE DB、ODBC 和 DB-Library 应用程序的大容量复制 API。
INSERT 语句在视图中工作与在表中工作一样,要受到一些限制。
二、使用 INSERT 添加行
1、使用 INSERT...Values 插入行
VALUES 关键字为表的某一行指定值。值被指定为逗号分隔的标量表达式列表,表达式的数据类型、精度和小数位数必须与列的列表对应的列一致,或者可以隐性地转换为列的列表中的对应列。如果没有指定列的列表,指定值的顺序必须与表或视图中的列顺序一致。
例如,下面的语句用 VALUES 子句将一个新的 shipper 插入到 Shippers 表中:
INSERT INTO Northwind.dbo.Shippers (CompanyName, Phone)
VALUES (N'Snowflake Shipping', N'(503)555-7233')
由于 ShipperID 列具有 IDENTITY 属性,要求插入列的列表,因此不能插入值。
I、用 INSERT 插入数据
Transact-SQL(点击查看)
2、使用 INSERT...SELECT 插入行
INSERT 语句中的 SELECT 子查询可用于将一个或多个其它的表或视图的值添加到表中。使用 SELECT 子查询可同时插入多行。
下面的 INSERT 语句将 titles 中数据的 type 是 modern cooking 的所有行的数据插入到一个单独的表中:
USE pubs
INSERT INTO MyBooks
SELECT title_id, title, type
FROM titles
WHERE type = 'mod_cook'
子查询的选择列表必须与 INSERT 语句列的列表匹配。如果没有指定列的列表,选择列表必须与正向其插入的表或视图的列匹配。
INSERT...SELECT 语句的另一个作用是从 Microsoft® SQL Server™ 的外部数据源插入数据。INSERT 语句中的 SELECT 可以:
使用由四部分组成的名称引用链接服务器上的远程表。
使用 OPENROWSET 引用远程表。
使用在远程服务器上执行的查询结果集。
3、使用 SELECT INTO 插入行
SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义,例如:
SELECT Shippers.*, Link.Address, Link.City,
Link.Region, Link.PostalCode
INTO NewShippers
FROM Shippers
JOIN LinkServer.DB.dbo.Shippers AS Link
ON (Shippers.ShipperID = Link.ShipperID)
SELECT INTO 可将几个表或视图中的数据组合成一个表。也可用于创建一个包含选自链接服务器的数据的新表。
II、使用结果集位置添加行
ADO、OLE DB 和 ODBC 应用程序接口 (API) 支持在处理查询结果集时添加行。其基本过程如下:
将结果集的各列绑定到程序变量上。
执行查询。
执行 API 函数或方法,将应用程序定位在结果集的某一行上。
对要插入的新行使用数据值填充绑定的程序变量。
执行以下函数或方法之一插入行:
在 ADO 中,调用 Recordset 对象的 AddNew 方法。
在 OLE DB 中,调用 IRowsetChange 接口的 InsertRow 方法。
在 ODBC 3.x 中,调用带有 SQL_ADD 选项的 SQLBulkOperations 函数。
新行的插入位置不必基于结果集中应用程序的位置。新行可以插入到与指定的任何聚集键值的值相关的基表中的某个位置。
III、将 ntext、text 或 image 数据添加到插入的行中
在行中添加 ntext、text 或 image 值的方法如下:
与 char、nchar 或者 binary 数据类似,在 INSERT 语句中指定相对较短的数据。
使用 WRITETEXT 语句。
ADO 应用程序可以使用 AppendChunk 方法指定较长的 ntext、text 或 image 数据。
OLE DB 应用程序可以使用 ISequentialStream 接口写入新的 ntext、text 或 image 值。
ODBC 应用程序可以使用 SQLPutData 的执行中的数据形式写入新的 ntext、text 或 image 值。
DB-Library 应用程序可以使用 dbwritetext 函数。
IV、使用大容量复制操作添加行
Microsoft® SQL Server™ 大容量复制组件支持:
在表或视图中插入多行。
从表、视图或查询中检索多行。
大容量复制是在 SQL Server 中添加大量行的最快的方法。执行大容量复制操作的方法有三种:
使用大容量复制程序(bcp 实用工具)。
bcp 是一种命令提示实用工具,利用 bcp 可以在 .bat 和 .cmd 脚本中运行大容量复制。在 SQL Server 数据库中,bcp 用于向表或视图中大容量复制大文件。
在 Transact-SQL 批处理、存储过程和触发器中,使用 BULK INSERT 语句从文件中将数据大容量复制到 SQL Server 数据库的表或视图中。
BULK INSERT 语句运行在 MSSQLServer 服务环境中的服务器上,而不是在客户机上。如果大容量复制的文件也在服务器上,数据就根本不用通过网络传送。这使得 BULK INSERT 成为服务器文件中最快的大容量复制选项。
为 OLE DB、ODBC 和 DB-Library 应用程序使用大容量复制 API。
bcp 实用工具是 ODBC 命令提示实用工具,它使用 SQL Server ODBC 驱动程序大容量复制函数。任何应用程序都可以在 ODBC 或 DB-Library 应用程序中使用这些发布的大容量复制函数来执行大容量复制操作。应用程序可将数据从文件大容量复制到 SQL Server 的表或视图中。也可以从程序变量中将数据大容量复制到 SQL Server 的表或视图中。
使用 bcp 实用工具添加数据(点击查看)