Принудительно проверять ограничения только при вставке строк в MSSQL? - PullRequest
1 голос
/ 02 сентября 2008

Есть ли способ применить проверку ограничений в MSSQL только при вставке новых строк? То есть разрешить нарушение ограничений при удалении / обновлении строк?

Обновление: я имею в виду ограничение FK.

Ответы [ 3 ]

7 голосов
/ 02 сентября 2008

Вы можете создать INSERT TRIGGER, который проверяет выполнение условий. Таким образом, все обновления будут проходить сразу.

CREATE TRIGGER employee_insupd
ON employee
FOR INSERT
AS
/* Get the range of level for this job type from the jobs table. */
DECLARE @min_lvl tinyint,
   @max_lvl tinyint,
   @emp_lvl tinyint,
   @job_id smallint
SELECT @min_lvl = min_lvl, 
   @max_lvl = max_lvl, 
   @emp_lvl = i.job_lvl,
   @job_id = i.job_id
FROM employee e INNER JOIN inserted i ON e.emp_id = i.emp_id 
   JOIN jobs j ON j.job_id = i.job_id
IF (@job_id = 1) and (@emp_lvl <> 10) 
BEGIN
   RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)
   ROLLBACK TRANSACTION
END
ELSE
IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)
BEGIN
   RAISERROR ('The level for job_id:%d should be between %d and %d.',
      16, 1, @job_id, @min_lvl, @max_lvl)
   ROLLBACK TRANSACTION
END
1 голос
/ 02 сентября 2008

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

Не зная больше о вашей конкретной ситуации, я бы повторил намерения других авторов, которые, кажется, "обеспечивают соблюдение требований вставки в вашем уровне доступа к данным". Тем не менее, я бы поспорил с их реализациями. Спусковой крючок кажется излишним, и любой компетентный администратор базы данных должен строго постучать вас по костяшкам деревянной линейкой за попытку использовать курсор для выполнения простой вставки. Хранимая процедура должна быть достаточной.

1 голос
/ 02 сентября 2008

Я думаю, что вам лучше всего удалить явное ограничение и добавить курсор для вставок, чтобы вы могли выполнить там проверку и выдать ошибку, если ограничение нарушено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...