SQL Server に自動インクリメント ID 列がありますが、行の 1 つに特定の値を指定したいと考えています。したがって、番号スキームは次のようになります。
1 ...,
2....,
999 - for the reserved entry,
3....,
n....
これどうやってするの?
SQL Server に自動インクリメント ID 列がありますが、行の 1 つに特定の値を指定したいと考えています。したがって、番号スキームは次のようになります。
1 ...,
2....,
999 - for the reserved entry,
3....,
n....
これどうやってするの?
You need to use IDENTITY_INSERT
:
SET IDENTITY_INSERT MyTableName ON
INSERT INTO MyTableName
(IdField, <list of all the fields>)
VALUES
(999, <list of other values)
SET IDENTITY_INSERT MyTableName OFF
DBCC CHECKIDENT(MyTableName, RESEED, 2)
You also have to use the explicit field list in the INSERT
statement, and are limited to one active IDENTITY_INSERT
per session.
This will also reset the seed value to be whatever you inserted if it's higher than the current ID value.
You can get around this too by using DBCC CHECKIDENT
but it'll be a big pain to manage.
IDENTITY_INSERTを使用できます。
SET IDENTITY_INSERT [tablename] ON;
INSERT INTO [tablename] (identitycolumn, ... ) VALUES (999, ...);
SET IDENTITY_INSERT [tablename] OFF;
これに頼らなければならないのは、常にコードの匂いです。これは、テーブルへの入力またはデータのレプリケートのためのデータ ロード プラクティスとしてのみ許容されます。アプリが ID を「予約」することは悪い習慣であり、データ モデルの設計上の欠陥を示しています。