Sql Server系列:修改数据
1、插入数据
SQL提供了4中形式的insert命令以及select/into命令作为插入数据的主要方法。insert命令的形式如下:
1>、insert/values:插入一行数据,通常用于插入来自用户界面的数据。
2>、insert/select:插入一个结果集,通常用于操作多行数据。
3>、insert/exec:插入一个存储过程的执行结果,用于复杂的数据操作。
4>、insert default:插入一个由各个列的默认值构成的新行,使用它可以通过预先填充的方式为未来的数据保留一些数据行。
5>、select/into:利用一个select语句的结果集来创建一个新表。
1.1、插入一行数据
最简单也最直接的插入数据的方法是insert/values方法。insert/values语句的语法格式如下:
INSERT [INTO] owner.Table [(columns, ...)] VALUES (value, ...)
1.2、插入select语句的结果集
使用insert/select语句,可以将一个查询结果集合中的数据迁移到表中。这种方法真正的能力在于:可以使用select语句命令从几乎所有的数据源中获取数据,并对其进行灵活加工处理以满足当前的需要。这使得insert/select语句具有了无与伦比的灵活性。因为select语句可以返回大量的行,所有这种insert方法可以一次插入大量的行。
insert/select语句的语法格式如下:
INSERT [INTO] owner.Table SELECT columns FROM datasources [WHERE conditions]
1.3、插入存储过程的结果集
insert操作的insert/exec方法可以利用存储过程来获取数据,并将这些数据插入到表中。这种方法的优势在于可以利用全部的T-SQL特性,插入列与存储过程结果集中的列必须一一对应。
insert/exec命令的基本语法:
INSERT [INTO] owner.Table [(columns)] EXEC StoreProcedure Parameters
与insert操作有关的一个特殊的问题是为新插入的行创建主键值,SQL Server为生成主键值提供了标识列和GUID。
在SQL Server中可以使用3种方法来获取系统生成的标识值:
◊ @@identity:这个全局变量可以返回SQL Server为任意表、连接和作用域所生成的最近一个标识值。如果在你进行insert操作的时间和检查@@identity的时间之间有另一个insert操作被执行,@@identity返回就不是系统为你的insert所生成的标识值,而是它为最近的这个insert操作所生成的标识值。
◊ scope_identity():可以返回在当前调用的批处理程序或者过程中的作用域内系统所生成的最近一个标识值。建议使用这个方法,因为这是一种最安全的确定你最近生成的标识值的方法。
◊ iden_current(table):返回系统为指定的表所生成的最近一个标识值,但只会返回指定表的标识值,不管对其他的表是否进行insert操作,这样可以防止深藏在触发器中的另一个insert操作影响到这个函数返回的结果。