INSERT语句的作用是将新行添加到表或视图。其语法格式如下:
其中,参数说明如下:
1.INTO
一个可选的关键字,可以将它用在 INSERT 和目标表之间。
2.tablename
要接受数据的表的名称。
3.(column_list)
要在其中插入数据的一列或多列的列表。必须用括号将 column_list 括起来,并且用逗号进行分隔。如果某列不在 column_list 中,则 SQL Server 2017 Database Engine必须能够基于该列的定义提供一个值;否则不能加载行。如果列满足下面的条件,则数据库引擎将自动为列提供值。
➢具有 IDENTITY 属性,使用下一个增量标识值。
➢有默认值,使用列的默认值。
➢具有 timestamp 数据类型,使用当前的时间戳值。
➢可为空值,使用空值。
➢是计算列,使用计算值。
➢当向标识列中插入显式值时,必须使用 column_list 和 VALUES 列表,并且表的 SET IDENTITY_INSERT 选项必须为 ON。
4.VALUES
引入要插入的数据值的列表。对于 column_list(如果已指定)或表中的每个列,都必须有一个数据值。必须用圆括号将值列表括起来。
如果 VALUES 列表中的各值与表中各列的顺序不相同,或者未包含表中各列的值,则必须使用 column_list 显式指定存储每个传入值的列。
5.DEFAULT
强制数据库引擎加载为列定义的默认值。如果某列并不存在默认值,并且该列允许空值,则插入 NULL。对于使用 timestamp 数据类型定义的列,插入下一个时间戳值。DEFAULT 对标识列无效。
6.expression
一个常量、变量或表达式。
7.derived_table
任何有效的 SELECT 语句,它返回将加载到表中的数据行。
8.DEFAULT VALUES
强制新行包含为每个列定义的默认值。同时,使用INSERT语句的时候,应注意以下事项。
(1) 不违反对表所增加的所有限制,这其中包括:
➢插入的数据类型应与字段的数据类型相同,同时数据的取值应在列规定的范围内。例如,不能把一个长度为20的字符串插入最大长度定义为10的列中。
➢不违反非空的验证。
➢标识列为系统自动填写,无须填写。
➢不违反所有的约束,即主键、外键、唯一、默认、检查约束。(www.xing528.com)
(2) 如果使用column_list,应保证列和值的一一对应。
(3) 如果[table]后面没有指定属性列表,那么待插入的常量值的顺序必须与表中定义属性列的顺序一样。
下面通过5个示例来说明用INSERT来向Students表中增加记录,Students表的结构如图3.1所示。
图3.1 Students表结构
1.执行简单的INSERT 语句
以下示例在Students表中插入一行。由于提供了所有列的值并按表中各列的顺序列出这些值,因此不必在 column_list中指定列名。
以下示例在Students表中插入一行,同时按照顺序提供了所有的列,并相应地给出了所有的值,这是一种值得推荐的做法。
2.按与表列不同的顺序插入数据
以下示例使用 column_list 显式指定插入到每个列的值。Students表中的列顺序如图3.1所示,但以下的列出顺序与column_list 中的顺序不同。
3.插入值少于列个数的数据
以下示例显示了如何将行插入到包含自动生成值或具有默认值的列的表中。INSERT 语句插入一些行,这些行只有部分列包含值。在以下的INSERT 语句中,注意在studentGender中使用了默认值。后一种方式给出了列名,同时使用了default。
或者
4.将数据插入到带有标识列的表
以下示例显示了将数据插入标识列的方法,使用Users表作为示例,其结构如图3.2所示。
图3.2 向Users表中插入数据
向带有标识列的Users表中插入数据,SQL语句如下:
5.使用 derived_table选项插入数据
以下示例显示几种不同的方法,使用派生表得到数据,并将数据插入到另一个表。(部分内容牵涉到后面的内容)
或者
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。