SQL Serverは、彼らが新たに挿入された行のためにオートインクリメントを意味している列identity
を作ることができます。私はあなたがトリガーを完全になくすことができるように1つを使用することをお勧めします。
すでにテーブル内のデータを持っている場合、あなたは新しいテーブルを作成し、そのようにそれを埋めるために定義されます:
CREATE TABLE T_USER_GROUP_New (
GroupSequence int identity(1,1) NOT NULL,
<Other Columns ...>
);
SET IDENTITY_INSERT T_USER_GROUP_New ON;
INSERT T_USER_GROUP_New (GroupSequence, <OtherColumns ...>)
SELECT * FROM T_USER_GROUP;
SET IDENTITY_INSERT T_USER_GROUP_New OFF;
-- Add script here to drop FK constraints from any tables with an FK to T_USER_GROUP
EXEC sp_rename 'T_USER_GROUP', 'T_USER_GROUP_Old';
EXEC sp_rename 'T_USER_GROUP_New', 'T_USER_GROUP';
-- Add script here to recreate FK constraints from any tables with an FK to T_USER_GROUP
-- Add script here to add appropriate indexes and constraints to T_USER_GROUP
-- and rename or drop them from T_USER_GROUP_Old
今すぐ挿入するときに、あなたが完全にGroupSequence列をスキップすることができ、そしてそれは意志常に次の増分値を取得します。あなたはそうすぐ後などにこの値を知ることができます。
DECLARE @NewGroupSequenceStart int,
@NewGroupSequenceEnd int;
INSERT T_USER_GROUP (<Columns not including GroupSequence ...>)
VALUES (<Values ...>);
-- or SELECT <Columns ...> FROM Somewhere
SELECT @NewGroupSequenceStart = Scope_Identity(), @NewGroupSequenceEnd = @@RowCount;
SET @NewGroupSequenceEnd = @NewGroupSequenceEnd + @NewGroupSequenceStart - 1;
-- Now these two variables have the start and end GroupSequence IDs
-- that were newly generated (you can insert multiple rows).
-- This could probably be cleaned up a little but I don't have time to test now.
私たちはOracle以外の専門家のために、上記のトリガーが何をするのか説明できますか? –
私の質問が更新されました。 – Switch
ありがとう、今私には意味がある。 :):new.GROUPSEQUENCEは、おそらく新しい行のGROUPSEQUENCE列への参照です。 –