Вам не нужно делать это в CHECK CONSTRAINT
. Триггер AFTER INSERT, UPDATE
должен обеспечивать такую же функциональность, что и CHECK CONSTRAINT
. Вам просто нужно отменить операцию INSERT
или UPDATE
, если требуемое условие выполнено (или не выполнено). И это легко сделать, просто введя ROLLBACK
, который работает благодаря триггерам, существующим в транзакции, которая является самой инструкцией DML. Следовательно, просто сделайте что-то вроде:
CREATE TRIGGER dbo.trCheckSomeField
ON dbo.SomeTable
AFTER INSERT, UPDATE
AS
SET NOCOUNT ON;
IF (EXISTS(
SELECT *
FROM Inserted ins
WHERE Utility.SQL#.RegEx_IsMatch(ins.SomeField, ...) = 0
)
)
BEGIN;
ROLLBACK TRAN;
RAISERROR('Your data suck!', 16, 1);
RETURN;
END;