Проверка целостности SQL отличается при обновлении и при вставке - PullRequest
0 голосов
/ 10 октября 2019

У меня есть SQL CHECK CONSTRAINT, который проверяет значения на основе значения столбца (расположенного в другом TABLE ->, поэтому FK не является опцией).

В основном что-то вроде:

--Function
CREATE FUNCTION [dbo].[func_CHECK_ID_EXISTS]
(
  if ...
  return 1
  else return 0
)

--CHECK CONSTRAINT
ALTER TABLE [dbo].[MY_TABLE]
ADD CONSTRAINT CHECK_ID_EXISTS
CHECK ([dbo].[func_CHECK_ID_EXISTS](MyColumn)=1);

Это работает отлично.

Теперь мне нужно, чтобы это развивалось.

При обновлении мне нужно было бы сделать такую ​​же проверку целостности, что и до (based on MyTable2.A). Но на insert мне нужно сделать проверку целостности на основе другого столбца (based on MyTable2.B).

Насколько я знаю, ни SQL function func_CHECK_ID_EXISTS, ни ограничение CHECK_ID_E enter code here XISTS не знает, еслиэлемент вставляется или обновляется, верно?

Так что check constraint, кажется, больше не вариант ...

Я имел в виду альтернативное решение с update triggerи insert trigger. Действительно, я могу установить различные условия в each trigger.

Но хотя insert trigger может проверять вставленный элемент через псевдостол INSERTED, я думаю, что у меня нет такой возможности для UPDATE trigger.

Я имею в виду, нет UPDATED pseudo table, это правильно?

Так есть ли возможность сравнить столбцы обновленного элемента в пределах update trigger?

...