2017-07-11 7 views
0

1つのシーケンスを使用して各テーブルの初期値1からシーケンス番号を生成する可能性はありますか(すべてのテーブルはIDで1つのシーケンスを使用して開始する必要があります)なぜシーケンスが必要なのですか?SQL Server 2012の新機能シーケンス

Iスクリプト下に使用している、

--Create the Test schema 
CREATE SCHEMA Test ; 
GO 

-- Create a table 
CREATE TABLE Test.Orders 
    (OrderID int PRIMARY KEY, 
    Name varchar(20) NOT NULL, 
    Qty int NOT NULL); 
GO 



-- Create a sequence 
CREATE SEQUENCE Test.TestSequence 
    START WITH 1 
    INCREMENT BY 1 ; 
GO 

-- Insert three records 
INSERT Test.Orders (OrderID, Name, Qty) 

    VALUES (NEXT VALUE FOR Test.TestSequence, 'One', 2) ; 

INSERT test.Orders (OrderID, Name, Qty) 

    VALUES (NEXT VALUE FOR Test.TestSequence, 'Two', 1) ; 

INSERT test.Orders (OrderID, Name, Qty) 

    VALUES (NEXT VALUE FOR Test.TestSequence, 'Three', 1) ; 
GO 

-- View the table 
SELECT * FROM Test.Orders ; 
GO 

    CREATE TABLE Test.Employee 
    (EmpId int PRIMARY KEY, 
    EmpName varchar(20) NOT NULL, 
    DeptId int NOT NULL, 
    Sal Decimal(15,2)); 
GO 
insert into Test.Employee (EmpId,EmpName,DeptId,Sal) values 

(NEXT VALUE FOR Test.TestSequence,'One',1,45000), 

(NEXT VALUE FOR Test.TestSequence,'Two',2,54000), 

(NEXT VALUE FOR Test.TestSequence,'Three',3,60000), 

(NEXT VALUE FOR Test.TestSequence,'Four',2,75000) 


INSERT Test.Orders (OrderID, Name, Qty) 
    VALUES (NEXT VALUE FOR Test.TestSequence, 'Four', 5) ; 

    insert into Test.Employee (EmpId,EmpName,DeptId,Sal) values 

(NEXT VALUE FOR Test.TestSequence,'Five',1,90000) 

select * from Test.Orders 

select * from Test.Employee 

O/P: -

OrderID, Name, Qty 
1  One  2 
2  Two  1 
3  Three  1 
8  Four  5 

EmpId EmpName DeptId Sal 
4 One  1  45000.00 
5 Two  2  54000.00 
6 Three 3  60000.00 
7 Four  2  75000.00 
9 Five  1  90000.00 

期待結果: - OrderIdで= 1,2,3,4 ....

+3

同じシーケンスを使用して別のテーブルの番号を生成しています。しないでください。別のテーブルに異なる番号を使用する場合は、別のシーケンスを使用します。 –

答えて

4

Sequenceidentity columnは使用できません)を使用する利点は次のとおりです。

  1. Sequenceはテーブルに関連付けられていませんが、テーブルの作成時にはidentityを作成する必要があります。 Sequenceを後で列に追加することができます。

  2. Sequenceサポート番号Cyclying番号グループを繰り返すことができる機能。

  3. TruncateSequenceをリセットしません。

  4. identity列は更新できません。 Alexとして(直接アイデンティティ値ではなく、identity_insertを更新)

  5. あなたが異なるテーブル間で競合しないようにキーを必要とするときSequenceはあなたに利便性を付与でき、コメントから言いました。

だから、テーブル任意の数の列のためMinValue 1またはStart with 1として作成された同じSequenceを使用することができます。

、あなたがCyclyingを使用しているとき、あなたは1ではなくStart WithMinValueを設定するために、より良いいただきたい注意SequenceMaxを打ったとき、あなたがなりますそのMinを指定しない場合はそれ以外の場合は、それが戻ってそのMinになりますしてください-2147483648デフォルトの場合INT

+0

このシーケンスでは、異なるテーブルに一意の番号を割り当てることができます。これは、たとえばデータパーティショニングで便利です。 – Alex

+0

これを指摘してくれてありがとう@Alex – LONG

+0

FWIW、身分証明書でも繰り返し番号が許されます。あなたはそれを再植えなければならない。いい答えだ!! –