SQL Server может создавать столбцы identity
, что означает автоинкремент для вновь вставленных строк.Я рекомендую вам использовать такую, которая позволит вам полностью отказаться от триггера.
Если у вас уже есть данные в таблице, вам нужно будет создать новую таблицу и заполнить ее следующим образом:
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.