SQL Serverのテーブルへの挿入時に値を更新する

SQL Serverを使用しています。テーブルに挿入する際に、テーブルの列 id にユニークな制約があります。挿入時に、 id 列に入る値は 0 である可能性があります。これによりエラーが発生します。

id の値が0の場合、この id を別の値に更新することは可能ですか?これは、エラーを防止し、有効な値を与えるためです。

おそらくトリガーですか?

1
SQLジョブによって挿入されたデータ
追加された 著者 amateur,
データベースからその列にデフォルトのバインディング値を設定し、試してください...
追加された 著者 Sai Kalyan Kumar Akshinthala,
どのようにデータを挿入していますか?
追加された 著者 Amar Palsapure,

3 答え

トリガーは1つの方法ですが、フィルタされたインデックスを使用することもできます(テーブル制約ではなくCREATE UNIQUE INDEX)、ゼロ値を無視します。この方法では、そこに置くべき値を心配する必要はありません

また、別の列からデータを取り込む場合は、一意の制約を持つ計算列を作成することもできます。

ALTER TABLE whatever 
    ADD ComputedUniqueCol = CASE WHEN Id = 0 THEN OtherCol ELSE Id END
1
追加された
0は有効な値ではないので、挿入時にキャッチしたい。
追加された 著者 amateur,
@amateur:その後、有効な値は何ですか?
追加された 著者 gbn,

トリガーの代わりに "トリガー"を作成し、IDの値をチェックします。

CREATE trigger checkID
on YOUR_TABLE
instead of insert
as
begin
    declare @id int
    select @id=id from inserted
    if (@id==0) begin
        --DO YOUR LOGIC HERE AND THEN INSERT
    end else begin
        insert into DESTINATION_TABLE (VALUES)
        SELECT VALUES FROM INSERTED
    end
end
0
追加された

これがプライマリキーであれば、それをIDENTITYとして指定できます。シードとインクリメントに基づいて値を生成する必要があります(デフォルトはseed = 1、デフォルト= 1)ので、心配する必要はありません。

CREATE TABLE MyTable
(
    ID int PRIMARY KEY IDENTITY,
    ...
)
0
追加された