Предложение по сценарию sql - PullRequest
0 голосов
/ 27 марта 2019

У меня есть два столбца в таблице

InventoryId | RevisionId
-------------------------
1   |   1
2   |   1
2   |   2
2   |   2
3   |   1
3   |   2
3   |   3
3   |   3

, но теперь я хочу запретить следующие записи

2   |   2
2   |   2
3   |   3
3   |   3

Поэтому я подумал создать уникальный индекс для этих двух столбцовно таблица, имеющая столько существующих данных.Поэтому все, что мы можем сделать в этой ситуации.Любое предложение?

1 Ответ

0 голосов
/ 27 марта 2019

вы можете использовать триггер, чтобы предотвратить добавление новых строк с дублирующимися значениями

посмотрите на этот пример

create trigger TR_UI_YourTable on YourTable
for update, insert as
begin
     set nocount on

     if exists (select 1 from inserted i where i.InventoryId = i.RevisionId)
     begin
          ;throw 99001, 'no dupes allowed anymore...', 1
     end
end

Лучшим решением было бы переместить дубликаты в отдельную таблицу дляистория, а затем добавить проверочное ограничение на эти 2 столбца

РЕДАКТИРОВАТЬ

вы можете сделать это с помощью проверочного ограничения, как это

alter table yourtable
add constraint chk_dupes 
  check ((InventoryId <> RevisionId) or (id <= 12345))

где 12345 - самое высокое значение столбца id.
Вам придется немного его проверить, если он работает во всех ситуациях.
Кроме того, он будет работать, только если все новые строки имеют значение в id больше текущего максимального значения (12345 в моем примере)

...