ID 列を持つテーブルに要素を再挿入する必要があるストアド プロシージャに取り組んでいます。これを行うと、ID 列を指定する必要がある行もあれば、ID 列によって生成される新しい ID 値が望ましい行もあります。の代わりに単一のステートメントでこれを行うことは可能IF-ELSE
ですか?
ここに私が今持っている解決策があります(id_column
ID列はどこにありますか):
DECLARE @id_to_insert INT, @val1 INT, @val2 INT, @val3 INT, @val4 INT;
-- Do some things
IF @id_to_insert IS NOT NULL
BEGIN
SET IDENTITY_INSERT dbo.table1 ON;
INSERT INTO dbo.table1 (id_column, col1, col2, col3, col4, col4)
VALUES (@id_to_insert, @val1, @val2, @val3, @val4);
SET IDENTITY_INSERT dbo.table1 OFF;
END
ELSE
BEGIN
INSERT INTO dbo.table1 (col1, col2, col3, col4, col4)
VALUES (@val1, @val2, @val3, @val4);
END
ご覧のとおり、両方のステートメントは非常に似ています。ほぼ同じ挿入を繰り返さなくて済むのは興味深いことです。
編集:
このテーブルには、現在の連絡先データが保持されます。アーカイブ/削除された連絡先を別のテーブルに移動して、このテーブルをクリーンで不要なデータのない状態に保ちますが、現在のデータ テーブルに復元することがあります。可能であれば、連絡先がアーカイブ/削除される前に持っていた ID を保持したいと思います。不可能な場合 (ID が既に再割り当てされている場合)、新しい ID を生成する必要があります。