3

我正在努力理解以下内容,

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 子句,用于控制将序列值分配给结果行的顺序

如果我能得到澄清,那就太好了

4

1 回答 1

4

NEXT VALUE FOR (Transact-SQL)

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

序号

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

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

SQL 小提琴演示

看看随附的 DEMO,您将看到自动编号在表中的使用效果。

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

SQL 小提琴演示

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

于 2013-10-11T08:34:13.520 回答