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)から

指定されたシーケンス オブジェクトからシーケンス番号を生成します。

シーケンス番号

シーケンスは、シーケンスが作成された仕様に従って一連の数値を生成する、ユーザー定義のスキーマ バインド オブジェクトです。一連の数値は、定義された間隔で昇順または降順で生成され、要求に応じて循環 (繰り返し) する場合があります。ID 列とは異なり、シーケンスはテーブルに関連付けられません。アプリケーションは、次の値を受け取るためにシーケンス オブジェクトを参照します。シーケンスとテーブルの関係は、アプリケーションによって制御されます。ユーザー アプリケーションは、シーケンス オブジェクトを参照し、複数の行とテーブルにわたって値キーを調整できます。

これは SQL Server 2012 の新機能であり、複数のテーブルで同じ ID シーケンスを使用して、異なるテーブル間で一意の ID を使用できるようにします。

SQL フィドルのデモ

添付の DEMO を見てください。自動採番がテーブル間でどのように使用されるかの効果がわかります

OVER ORDER BY は、生成されたシーケンスの順序が指定されていることを確認するだけです。

SQL フィドルのデモ

上記のデモは、元の ID の順序に基づいてシーケンスがどのように割り当てられるかを示しているはずです。

于 2013-10-11T08:34:13.520 に答える