TSQL使用Sequences插入表中

时间:2013-10-11 08:28:13

标签: sql-server tsql sql-order-by sequence

我正在努力理解下面的内容,

INSERT INTO Sales.MyOrders(orderid, custid, empid, orderdate) 
SELECT NEXT VALUE FOR Sales.SeqOrderIDs OVER(ORDER BY orderid),
       custid,
       empid,
       orderdate
FROM Sales.Orders
WHERE custid = 1; 

这本书说

  

带有ORDER BY列表的OVER子句,用于控制将序列值分配给结果行的顺序

如果我能得到澄清的话会很棒

1 个答案:

答案 0 :(得分:3)

来自NEXT VALUE FOR (Transact-SQL)

  

从指定的序列对象生成序列号。

Sequence Numbers

  

序列是用户定义的模式绑定对象,它生成一个   根据规范的数值序列   序列已创建。生成数值序列   以定义的间隔以升序或降序排列并且可以   按要求循环(重复)。与标识列不同,序列是   与表格无关。应用程序引用序列对象   接收其下一个价值。序列与序列之间的关系   表由应用程序控制。用户应用可以   引用序列对象并协调值键   多行和多个表。

这是SQL Server 2012中的新功能,它允许多个表使用相同的标识序列,以允许不同表中的唯一ID。

SQL Fiddle DEMO

查看附加的DEMO,您将看到 autonumber 如何在表格中使用的效果。

OVER ORDER BY只确保指定生成序列的顺序。

SQL Fiddle DEMO

上面的演示应该说明如何根据原始ID的ORDER分配序列。