Триггер для изменения автоинкрементного значения - PullRequest
1 голос
/ 17 июня 2011

У меня есть простая таблица с налоговыми ставками

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TaxRates](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_TaxRates] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Если пользователь удалил запись, я не хочу менять автоинкремент при следующей вставке.

Чтобы получить больше разрешения.

Теперь у меня есть 3 записи с идентификаторами 0,1 и 2. Когда я удаляю строку с идентификатором 2 и через некоторое время добавляю следующую ставку налога, я хочу, чтобы записи в этой таблице были такими же, как до 0,1,2.Там не должно быть шансов иметь разрыв, как 0,1,2,4,6.Это должен быть триггер.

Не могли бы вы помочь с этим?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Вам нужно принять пробелы или не использовать IDENTITY

  1. идентификатор не должен иметь внешнего значения
  2. Невозможно обновить значения IDENTITY
  3. В столбцах IDENTITY всегда будут пробелы
  4. В этом случае вы обновите кластерный ПК, который будет дорогим
  5. А как насчет внешних ключей? тебе нужен КАСКАД
  6. Смежные числа могут быть сгенерированы с помощью ROW_NUMBER () во время чтения
  7. Без IDENTITY (загружаете ли вы эту таблицу или другую) не будет безопасным для параллелизма при загрузке
  8. Попытка вставки в пробел (с помощью триггера INSTEAD OF) не будет безопасна для параллелизма под нагрузкой
  9. (Редактировать) Таблицы истории могут иметь удаленные значения в любом случае
0 голосов
/ 17 июня 2011

Если в столбце идентификаторов что-то передается в вашей организации, есть возможность скопировать этот столбец в столбец без идентификаторов в той же таблице, и вы можете изменить эти новые значения идентификатора по своему желанию, сохраняя при этом фактическое поле идентификатора.

Включение и выключение identity_insert позволяет вставлять значения идентификаторов.

...