0

なぜ、どこで、このようなことが起こったのかは省略して、簡単な言葉で説明しようと思います。

現在、マージする必要がある 2 つのデータベースがあり、それらには同じテーブルなどがあります。ルックアップ テーブルが同一である場合もあれば、同一である場合もあり、1 つのデータベースのレコードの ID 値が異なる場合があり、他の DB には同等のものがあります。 . だからめちゃくちゃです。

データベースの 1 つで、すべての ID 値を更新し、それらに 10,000 を追加して、関連するレコードを更新するとします。次に、データをそのままインポートできます。場合によっては、ルックアップが異なる ID で同じ値を 2 回持つことがあります。

質問は上記の混乱に関するものではありません:)。ID 列を再度有効にした後、シード値がどのようになるかを知りたい

1,2,3,4,5 などと 10001、10002、10003 など。さらに行が挿入され、9999 か​​ら続行する必要がある場合は、ID 列が 10,000 を使用してから 10,004 を使用するか、SQL Server が次の挿入で文句を言うかID 値は既に使用されていますか?

4

2 に答える 2

0

これらはしばしば一緒に現れ、2 つの直交する概念であることを認識しておくことがIDENTITY重要PRIMARY KEYです1。したがって、質問に対する答えはノーですIDENTITY。 column は、同じ列で既に使用されている値を非常に喜んで提供するためです。

set nocount on
go
create table II (
    ID int IDENTITY(1,1) not null,
    Value varchar(10) not null
)
insert into II(Value) values ('abc'),('def')
set identity_insert II on
insert into II(ID,Value) values (6,'ghi')
set identity_insert II off
select * from II
insert into II(Value) values ('jkl')
select * from II
GO
dbcc checkident (II, RESEED, 5);
GO
insert into II(Value) values ('mno'),('pqr')
select * from II

結果:

ID          Value
----------- ----------
1           abc
2           def
6           ghi

ID          Value
----------- ----------
1           abc
2           def
6           ghi
7           jkl

Checking identity information: current identity value '7'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
ID          Value
----------- ----------
1           abc
2           def
6           ghi
7           jkl
6           mno
7           pqr

PRIMARY KEY重複した値を挿入しようとすると、 aは文句を言います:

create table III (
    ID int IDENTITY(1,1) not null PRIMARY KEY,
    Value varchar(10) not null
)
insert into III(Value) values ('abc'),('def')
set identity_insert III on
insert into III(ID,Value) values (6,'ghi')
set identity_insert III off
select * from III
insert into III(Value) values ('jkl')
select * from III
GO
dbcc checkident (III, RESEED, 5);
GO
insert into III(Value) values ('mno'),('pqr')
select * from III
go

(前のスクリプトとの唯一の違いは、テーブル名と の追加ですPRIMARY KEY)

結果:

ID          Value
----------- ----------
1           abc
2           def
6           ghi

ID          Value
----------- ----------
1           abc
2           def
6           ghi
7           jkl

Checking identity information: current identity value '7'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__III__3214EC27FCCBBCB7'. Cannot insert duplicate key in object 'dbo.III'. The duplicate key value is (6).
The statement has been terminated.
ID          Value
----------- ----------
1           abc
2           def
6           ghi
7           jkl

1これら 2 つと混同されることが多い 3 番目の概念は、クラスター化インデックスの概念です。テーブルに、共通の列を持たない主キー、ID 列、およびクラスター化インデックスを含めることは完全に可能です。

于 2013-09-04T13:13:48.747 に答える
0

単純な INSERT でこれをテストしたところIDENTITY_INSERTです。データをインポートするテーブルごとに最初に無効にする必要があります

SET IDENTITY_INSERT table OFF

次に、元の ID 列の値を使用してデータを挿入できます (参照を正しく維持するために必要です)。

SET IDENTITY_INSERT table ON

SQL Server は最高の要素に 1 を加えたシーケンスを続行するため、この場合 (ID 10001、10002、10003 を挿入した後) は 10004 に続きます。

于 2013-09-04T13:13:50.823 に答える