资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
INSERT (Transact-SQL)将一个或更多新行添加到表或视图中。Transact-SQL 语法约定语法 WITH ,.n INSERT TOP ( expression ) PERCENT INTO | rowset_function_limited WITH ( .n ) ( column_list ) VALUES ( DEFAULT | NULL | expression ,.n ) ,.n | derived_table | execute_statement | | DEFAULT VALUES ; := server_name . database_name . schema_name . | database_name . schema_name . | schema_name . table_or_view_name:=SELECT FROM ( ) AS table_alias ( column_alias ,.n ) WHERE OPTION ( ,.n ) 参数WITH 指定在 INSERT 语句作用域内定义的临时命名结果集(也称为公用表表达式)。结果集源自 SELECT 语句。公用表表达式还可以与 SELECT、DELETE、UPDATE 和 CREATE VIEW 语句一起使用。有关详细信息,请参阅 WITH common_table_expression (Transact-SQL)。TOP ( expression ) PERCENT 指定将插入的随机行的数目或百分比。expression 可以是行数或行的百分比。在和 INSERT、UPDATE 或 DELETE 语句结合使用的 TOP 表达式中引用的行不按任何顺序排列。在 INSERT、UPDATE 和 DELETE 语句中,需要使用圆括号分隔 TOP 中的 expression。有关详细信息,请参阅 TOP (Transact-SQL)。INTO 一个可选的关键字,可以将它用在 INSERT 和目标表之间。server_name 表或视图所在服务器的名称(将 OPENDATASOURCE 函数用作服务器名称)。如果指定了 server_name,则需要 database_name 和 schema_name。database_name 数据库的名称。schema_name 表或视图所属架构的名称。table_or view_name 要接收数据的表或视图的名称。table 变量在其作用域内可用作 INSERT 语句中的表源。table_or_view_name 引用的视图必须可更新,并且只在该视图的 FROM 子句中引用一个基表。例如,多表视图中的 INSERT 必须使用只引用一个基表中的各列的 column_list。有关可更新视图的详细信息,请参阅 CREATE VIEW (Transact-SQL)。rowset_function_limited OPENQUERY 或 OPENROWSET 函数。WITH ( . n ) 指定目标表允许的一个或多个表提示。需要有 WITH 关键字和括号。不允许 READPAST、NOLOCK 和 READUNCOMMITTED。有关表提示的详细信息,请参阅表提示 (Transact-SQL)。重要提示:在将来的 SQL Server 版本中,将删除对作为 INSERT 语句目标的表指定 HOLDLOCK、SERIALIZABLE、READCOMMITTED、REPEATABLEREAD 或 UPDLOCK 提示的功能。这些提示不影响 INSERT 语句的性能。请避免在新的开发工作中使用该功能,并计划修改当前使用该功能的应用程序。 对作为 INSERT 语句目标的表指定 TABLOCK 提示与指定 TABLOCKX 提示具有相同的效果。对表采用排他锁。( column_list ) 要在其中插入数据的一列或多列的列表。必须用括号将 column_list 括起来,并且用逗号进行分隔。如果某列不在 column_list 中,则数据库引擎必须能够基于该列的定义提供一个值;否则不能加载行。如果列满足下面的条件,则数据库引擎将自动为列提供值: 具有 IDENTITY 属性。使用下一个增量标识值。 有默认值。使用列的默认值。 具有 timestamp 数据类型。使用当前的时间戳值。 可以为 Null。使用 Null 值。 是计算列。使用计算值。当向标识列中插入显式值时,必须使用 column_list 和 VALUES 列表,并且表的 SET IDENTITY_INSERT 选项必须为 ON。OUTPUT 子句 将插入行作为插入操作的一部分返回。引用本地分区视图、分布式分区视图或远程表的 DML 语句或包含 execute_statement 的 INSERT 语句都不支持 OUTPUT 子句。在包含 子句的 INSERT 语句中不支持 OUTPUT INTO 子句。VALUES 引入要插入的数据值的一个或多个列表。对于 column_list(如果已指定)或表中的每个列,都必须有一个数据值。必须用圆括号将值列表括起来。如果 VALUES 列表中的各值与表中各列的顺序不相同,或者未包含表中各列的值,则必须使用 column_list 显式指定存储每个传入值的列。SQL Server 2008 引入了 Transact-SQL 行构造函数(又称为表值构造函数),用于在一个 INSERT 语句中指定多个行。行构造函数包含一个 VALUES 子句和多个括在圆括号中且以逗号分隔的值列表。请参见下面“示例”部分中的“ 示例 B”。若要插入多行值,VALUES 列表的顺序必须与表中各列的顺序相同,且此列表必须包含与表中各列或 column_list 对应的值以便显式指定存储每个传入值的列。在多行 INSERT 语句中指定的值遵循 UNION ALL 语法的类型转换属性。这样,不匹配的类型可以隐式转换为具有更高优先级的类型。如果此转换不是所支持的隐式转换,则返回错误。例如,以下语句将整数值和字符值插入到类型为 char 的列中。CREATE TABLE t (a int, b char);GOINSERT INTO t VALUES (1,a), (2, 1);GO运行 INSERT 语句时,SQL Server 尝试将 a 转换为整数,因为数据类型优先级指示整数类型的优先级高于字符。转换失败,并且返回错误。您可以根据需要显式转换值,从而避免发生此错误。例如,前面的语句可以编写为:INSERT INTO t VALUES (1,a), (2, CONVERT(CHAR,1);可在单个 INSERT 语句中插入的最大行数为 1000。若要插入超过 1000 行的数据,请创建多个 INSERT 语句,或通过使用 bcp 实用工具或 BULK INSERT 语句大容量导入数据。DEFAULT 强制数据库引擎加载为列定义的默认值。如果某列并不存在默认值,并且该列允许 Null 值,则插入 NULL。对于使用 timestamp 数据类型定义的列,插入下一个时间戳值。DEFAULT 对标识列无效。expression 一个常量、变量或表达式。表达式不能包含 EXECUTE 语句。注意:当引用 Unicode 字符数据类型 nchar、nvarchar 和 ntext 时, expression 应采用大写字母 N 作为前缀。如果未指定 N,则 SQL Server 会将字符串转换为与数据库或列的默认排序规则相对应的代码页。此代码页中没有的字符都将丢失。 derived_table 任何有效的 SELECT 语句,它返回将加载到表中的数据行。SELECT 语句不能包含公用表表达式 (CTE)。execute_statement 任何有效的 EXECUTE 语句,它使用 SELECT 或 READTEXT 语句返回数据。如果 execute_statement 使用 INSERT,则每个结果集必须与表或 column_list 中的列兼容。可以使用 execute_statement 对同一服务器或远程服务器执行存储过程。执行远程服务器中的过程,并将结果集返回到本地服务器并加载到本地服务器的表中。在分布式事务中,当连接启用了多个活动结果集 (MARS) 时,无法针对环回链接服务器发出 execute_statement。如果 execute_statement 使用 READTEXT 语句返回数据,则每个 READTEXT 语句最多可以返回 1 MB (1024 KB) 的数据。execute_statement 还可以用于扩展过程。execute_statement 插入由扩展过程的主线程返回的数据,但不插入主线程以外的线程的输出。指定插入目标表的行是 INSERT、UPDATE、DELETE 或 MERGE 语句的 OUTPUT 子句返回的行;可以通过 WHERE 子句对行进行筛选。如果指定了 ,外部 INSERT 语句的目标必须满足以下限制: 必须是基表而不是视图。 不能是远程表。 不能对其定义任何触发器。 不能参与任何主键-外键关系。 不能参与合并复制或事务复制的可更新订阅。数据库的兼容级别必须设置为 100。有关详细信息,请参阅下面 “备注”下的“ 从 OUTPUT 子句插入”。指定要插入 OUTPUT 子句返回的哪些列的逗号分隔列表。 中的列必须与要插入值的列兼容。 无法引用聚合函数或 TEXTPTR。注意:无论在 中对 SELECT 列表中列出的任何变量做何种更改,这些变量都将引用其原始值。 在 OUTPUT 子句中返回受影响行的有效 INSERT、UPDATE、DELETE 或 MERGE 语句。语句中不能包含 WITH 子句,且不能以远程表或分区视图为目标。如果指定了 UPDATE 或 DELETE,则所指定的 UPDATE 或 DELETE 不能是基于游标的。源行不能作为嵌套的 DML 语句进行引用。WHERE 任意 WHERE 子句,其中包含对 返回的行进行筛选的有效 。有关详细信息,请参阅 搜索条件 (Transact-SQL)。在此上下文中使用时, 不能包含子查询、执行数据访问的标量用户定义函数、聚合函数、TEXTPTR 或全文搜索谓词。DEFAULT VALUES 强制新行包含为每个列定义的默认值。备注INSERT 将新行追加到表中。若要替换表中的数据,必须在使用 INSERT 加载新数据之前,使用 DELETE 或 TRUNCATE TABLE 语句清除现有的数据。若要修改现有行中的列值,请使用 UPDATE。可以创建新表,并使用 SELECT 语句的 INTO 选项通过一个步骤为它加载数据。使用 uniqueidentifier 数据类型创建的列存储特殊格式的 16 位二进制值。与标识列不同,数据库引擎不为 uniqueidentifier 数据类型的列自动生成值。在插入操作过程中,可以将 uniqueidentifier 数据类型的变量和 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 格式的字符串常量(包括连字符在内共 36 个字符,其中 x 表示从 0 到 9 或从 a 到 f 的十六进制数字)用于 uniqueidentifier 列。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 是 uniqueidentifier 变量或列的有效值。使用 NEWID
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号