T-SQL 语句可以通过打开一个新的“Query Window”(查询窗口)直接输入到SQL Server中。要启动一个查询窗口,打开SQL Server管理套件,选中正确的数据库,然后点击上面菜单中的New Query(新建查询)按钮。一个空白的查询窗口将被打开。 INSERT命令
让我们从INSERT命令最基本的语法开始。
INSERT 命令之后必须跟着你想添加数据的表的名称。INTO关键字是可选的。但是,INTO使得这个语句更加可读。在这个例子中,输入了两个信息字段。在VALUES行中出现的字段顺序必须和INTO语句的顺序一致。所以INTO和VALUES行的项目数和所列顺序必须一致。如果这两行不一致,那么会抛出一个类似于下面的错误:
Msg 110, Level 15, State 1, Line 1
There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
在INSERT语句中的字段数比VALUES条件子句中指定的值少。VALUES条件子句的值的数目必须和INSERT语句中所指定的字段数一样。
输入所有的值
如果在信息中给每个字段都插入值,那么没有必要指定每个字段的名称。但是,要使用这个语法,在信息中给字段赋的值必须按照表定义中字段的顺序来输入。
图1
多条插入记录
SQL Server 2008支持在一个语句中插入多条记录。每行数据以逗号结尾,直到最后一行INSERT命令像普通情况一样结束。
SQL Server的其它版本要求每条记录都执行一个单独的语句。
默认字段
如果一个字段被定义了一个默认值,那么如果没有在INSERT 语句中直接给这个字段赋值的话,每一个新记录中将插入这个默认值。例如,这个表的State字段有一个默认值“WI”。
图2
执行一个INSERT语句,类似于下面所显示的,没有给State 直接赋值,那么将使用默认值WI。
获得插入
插入的值可以用一个select 语句获取到。在这个例子中,CustID和CustName是从现有数据中获得的,而不是直接输入的。在这个语句的INTO部分指定的每个字段使用普通的INSERT规则,它们必须有相匹配的返回值。
其它规则
你不能插入NULL值或重复值到任何主键字段。
外键的值确认两个表间的关系。当插入或修改有外键约束的字段中的值时,相应的值必须显示在所关联的表中。
自动填充的IDENTITY字段如果没有先执行一个特定的插入确认命令:SET IDENTITY_INSERT ON,那么不能用特定值插入。例如,下面的语句显示了插入到一个IDENTITY字段。Test是表名称。
插入的值不需要是Identity字段通常使用的下一个数字。这意味着如果这之前输入了三条记录,ID是1、2和3,那么4或4以后的数字都可以使用。我们没有强制使用4。我们可以使用5、6或其它任何更大的数字。这么做将引起一个问题。下一次自动一致性被调用的时候;它会查找最大的数字然后加一。
管理套件插入
现在让我们探究怎样使用SQL Server管理套件的图形界面来插入数据。右键单击对象浏览器中的表。从上下文菜单中选择Edit Top 200 Rows。
图3
一个具有生成的数据的数据网格将显示出来,如下所示。这个数据网格和MS Excel非常类似,所有你可以以一种熟悉的方式来输入数据。在左边加星号的记录显示了这个表的插入点。当输入数据时,你必须指定符合每个字段所设约束的可接受值。
图4
查询设计器
另一个图形化方法是使用查询编辑器的设计视图来插入数据到一个表中。在一个空白查询窗口中右键单击,然后选择Query、Design Query in Editor,如下图所示。
图5
从Add Tables对话框中,选择你想插入或更新数据的表。右键单击查询设计器中的任何地方,然后从上下文菜单中选择Change Type、Insert Values。
图6
当你在查询设计器的中间面板中输入数据到Column和New Value中时,INSERT INTO 脚本就被建立了。当你输入值后,点击OK退出设计视图。点击F5或Execute按钮来插入数据。
图7
要在你的语句运行过一次之后编辑它,那么选中整个语句,右键单击选中区域中的任何位置,然后在查询编辑器中选择Design。如果没有选中整个语句,那么将打开一个新的设计窗口而不是编辑现有的代码。
总结
INSERT语句使得可以输入值到一个SQL Server表中。语句可以是手工输入或是通过查询设计器图形化地创建。值可以是直接输入或从其它一些SELECT语句获得。在SQL Server 2008中新推出的是在一个单独的语句中输入多条记录的能力。
让我们从INSERT命令最基本的语法开始。
INSERT [INTO] table_name [column_list] VALUES default values values_list INSERT INTO Customers (CustID, CustName) VALUES ('Cust1', 'Smith Company'); |
Msg 110, Level 15, State 1, Line 1
There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
在INSERT语句中的字段数比VALUES条件子句中指定的值少。VALUES条件子句的值的数目必须和INSERT语句中所指定的字段数一样。
输入所有的值
如果在信息中给每个字段都插入值,那么没有必要指定每个字段的名称。但是,要使用这个语法,在信息中给字段赋的值必须按照表定义中字段的顺序来输入。
INSERT INTO Customers VALUES ('Cust1', 'Smith Company', '123 West 51 st', 'Tampa', 'FL'); |
多条插入记录
SQL Server 2008支持在一个语句中插入多条记录。每行数据以逗号结尾,直到最后一行INSERT命令像普通情况一样结束。
INSERT INTO Customers (CustID, CustName) VALUES ('Cust1', 'Smith Company'), ('Cust2', 'Perform Company'), ('Cust3', 'Test Inc'); |
默认字段
如果一个字段被定义了一个默认值,那么如果没有在INSERT 语句中直接给这个字段赋值的话,每一个新记录中将插入这个默认值。例如,这个表的State字段有一个默认值“WI”。
图2
执行一个INSERT语句,类似于下面所显示的,没有给State 直接赋值,那么将使用默认值WI。
INSERT INTO Customers (CustID, CustName) VALUES ('Cust1', 'Smith Company'); |
获得插入
INSERT INTO Customers (CustID, CustName) SELECT CustID, CustName FROM LastYearSales |
其它规则
你不能插入NULL值或重复值到任何主键字段。
外键的值确认两个表间的关系。当插入或修改有外键约束的字段中的值时,相应的值必须显示在所关联的表中。
自动填充的IDENTITY字段如果没有先执行一个特定的插入确认命令:SET IDENTITY_INSERT ON,那么不能用特定值插入。例如,下面的语句显示了插入到一个IDENTITY字段。Test是表名称。
SET IDENTITY_INSERT test ON INSERT INTO test (myID) VALUES (4) SET IDENTITY_INSERT test OFF |
管理套件插入
现在让我们探究怎样使用SQL Server管理套件的图形界面来插入数据。右键单击对象浏览器中的表。从上下文菜单中选择Edit Top 200 Rows。
图3
一个具有生成的数据的数据网格将显示出来,如下所示。这个数据网格和MS Excel非常类似,所有你可以以一种熟悉的方式来输入数据。在左边加星号的记录显示了这个表的插入点。当输入数据时,你必须指定符合每个字段所设约束的可接受值。
图4
查询设计器
另一个图形化方法是使用查询编辑器的设计视图来插入数据到一个表中。在一个空白查询窗口中右键单击,然后选择Query、Design Query in Editor,如下图所示。
图5
从Add Tables对话框中,选择你想插入或更新数据的表。右键单击查询设计器中的任何地方,然后从上下文菜单中选择Change Type、Insert Values。
图6
当你在查询设计器的中间面板中输入数据到Column和New Value中时,INSERT INTO 脚本就被建立了。当你输入值后,点击OK退出设计视图。点击F5或Execute按钮来插入数据。
图7
要在你的语句运行过一次之后编辑它,那么选中整个语句,右键单击选中区域中的任何位置,然后在查询编辑器中选择Design。如果没有选中整个语句,那么将打开一个新的设计窗口而不是编辑现有的代码。
总结
INSERT语句使得可以输入值到一个SQL Server表中。语句可以是手工输入或是通过查询设计器图形化地创建。值可以是直接输入或从其它一些SELECT语句获得。在SQL Server 2008中新推出的是在一个单独的语句中输入多条记录的能力。