SQL Serverに自動インクリメントID列がありますが、行の1つに特定の値を指定します。番号体系は次のようになります。SQL Serverの自動インクリメント列に特定の値を指定する方法はありますか。
1 ...,
2....,
999 - for the reserved entry,
3....,
n....
どうすればいいですか?
SQL Serverに自動インクリメントID列がありますが、行の1つに特定の値を指定します。番号体系は次のようになります。SQL Serverの自動インクリメント列に特定の値を指定する方法はありますか。
1 ...,
2....,
999 - for the reserved entry,
3....,
n....
どうすればいいですか?
あなたは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)
あなたはまた、INSERT
文で明示的なフィールドのリストを使用する必要があり、セッションごとに一つの活性IDENTITY_INSERT
に限定されています。
これは、現在のID値よりも高い場合、挿入した値にシード値をリセットします。
これもまたDBCC CHECKIDENT
を使用して回避することができますが、管理するのは非常に苦労します。
ありがとうJNK、あなたの答えにDBCCコールを追加しました。 – Achilles
あなたはIDENTITY_INSERTを使用することができます。これに頼ら
SET IDENTITY_INSERT [tablename] ON;
INSERT INTO [tablename] (identitycolumn, ...) VALUES (999, ...);
SET IDENTITY_INSERT [tablename] OFF;
は、常にコードのにおいです。これは、表の集団またはデータの複製のためのデータロードの練習として許容されます。アプリがIDを「予約」することは悪い習慣であり、データモデルの設計上の欠陥を示しています。
+1はコードの臭いのコメントです。 – JNK
あなたはrusanuのコンサルティングからサービスブローカーの達人ですか?あなたのダイアログプールのテクニックが本当にサービスブローカーの力に私の目を開いた場合。 – Namphibian
行998を挿入するときは注意が必要です。次のインサートがPKの制約に違反するため(この時点で999がすでに存在しているため) –
Jim Bに感謝します。このテーブルは十分に小さく、予約番号に達することはないと想定しています。 – Achilles
問題ありません。私たちはここでこのような何かを持っていました。ここでは1-499が予約されていると判断したため、IDシードは500で開始しました。シナリオに役立つかどうかはわかりません。 –