в третьих: я бы сделал лучше констрейнт вместо тригера
для этого создал бы скалярную инлайн функцию
create function dbo.ZZZ(@ID Char(10))
RETURNS Tinyint
As (select [Attribute3] from [Entity2] where Entity2.[ID]=@ID )
и создал бы на таблице Entity1 констрейнт
ALTER TABLE Entity1 WITH NOCHECK
ADD CONSTRAINT Attribute4_check CHECK (Attribute4 > dbo.ZZZ(ID))
Пытаюсь последовать Вашему совету: заменить триггер на CONSTRAINT. Изменил SQL-запрос для создания БД на следующий(хочется "на пальцах" все верно построить, а не исправлять полученный баг):
CREATE TABLE [Entity1]
(
[Уникальный_таблица1] Uniqueidentifier NOT NULL,
[Attribute2] Varchar(100) NULL,
[Attribute3] Varchar(100) NULL,
[Attribute4] Tinyint NOT NULL,
[ID] Char(10) NOT NULL,
CONSTRAINT [Attribute4_check] CHECK (Attribute4 > ZZZ(ID))
)
go
-- Add keys for table Entity1
ALTER TABLE [Entity1] ADD CONSTRAINT [Key1] PRIMARY KEY ([Уникальный_таблица1],[ID])
go
-- Table Entity2
CREATE TABLE [Entity2]
(
[ID] Char(10) NOT NULL,
[Attribute2] Varchar(100) NULL,
[Attribute3] Tinyint NULL
)
go
-- Add keys for table Entity2
ALTER TABLE [Entity2] ADD CONSTRAINT [Key2] PRIMARY KEY ([ID])
go
-- Create functions section -------------------------------------------------
CREATE FUNCTION [ZZZ] (@ID Char(10))
RETURNS Tinyint
AS
BEGIN
Declare @returnedValue Tinyint
SELECT @returnedValue= [Attribute3] FROM [Entity2] WHERE Entity2.[ID]=@ID
RETURN @returnedValue
END
go
-- Create relationships section -------------------------------------------------
ALTER TABLE [Entity1] ADD CONSTRAINT [Relationship1] FOREIGN KEY ([ID]) REFERENCES [Entity2] ([ID])
go
Но при попытке выполнить данный код получаю ошибки:
"Сообщение 195, уровень 15, состояние 10 ZZZ не является известным имя встроенной функции.
Сообщение 4902, уровень 16, состояние 1, строка 4 Не удалось найти объект "Entity1", так как он не существует, или отсутствуют разрешения.
Сообщение 4902, уровень 16, состояние 1, строка 4 Не удалось найти объект "Entity1", так как он не существует, или отсутствуют разрешения."
Последние две ошибки понятно с чем связаны - т.к. ZZZ неизвестна, то Entity1 не создалась. Причина первой ошибки тоже понятна - ZZZ определяется ниже, но куда тогда надо "всунуть" в запросе эту функцию, чтобы он нормально исполнился(если впихнуть её перед определением таблиц, то получим аналогичную ошибку, но по отношению к Entity2) или функцию ZZZ и ограничения на Attribute4 нужно вставлять с помощью отдельного запроса после вставки всех таблиц?