Я пытаюсь создать триггер, чтобы проверить, что сумма вставок трех разных типов древесины должна быть равна 10 (10 представляют 100%) в определенной «рабочей области» в таблице, называемой SpaceMixes. «Процент» - это столбец, в котором процент деревянного типа хранится в определенном рабочем пространстве (типы древесины называются «H», «P» или «F»).триггер для вставки для проверки суммы
Эти рабочие пространства определяются их первичным ключом комбинации (AreaNr, SpaceNr), хотя весь PK для SpaceMixes (AreaNr, SpaceNr, WoodType). Триггер ниже проверяет, что сумма может быть только 10 в одном рабочем пространстве, но проблема в том, что первое значение также должно быть 10 с этим кодом. Но я хотел бы иметь возможность вставить как «2 + 5 + 3» для рабочего пространства, и он не должен допускать, например, 2 + 5 + 5, так как это превысит сумму 10 в общей сложности для этого рабочего пространства (см. желаемый результат).
Текущий триггер Я использую:
ALTER TRIGGER trg_Sum ON SpaceMixes
FOR INSERT AS
DECLARE @sum INT
SELECT @sum = sum(SpaceMixes.Percentage)
FROM inserted, SpaceMixes
WHERE inserted.AreaNr = SpaceMixes.AreaNr AND inserted.SpaceNr = SpaceMixes.SpaceNr
GROUP BY inserted.AreaNr
IF NOT (@sum = 10)
BEGIN
RAISERROR ('The sum of the percentages must be 10 for each work space!',16, 1)
ROLLBACK TRANSACTION
END
DESIRED РЕЗУЛЬТАТ: Первые две вставки ниже должны работать нормально, но я хотел бы триггер должен быть активирован на третьем, так как процент «5 'будет превосходить сумму 10 (5 + 3 + 5 = 13) для рабочего пространства (2, 3). Я другие слова, третья вставка должна быть разрешена только, если данный процент был 2 вместо 5
INSERT INTO SpaceMixes VALUES (2, 3, 'P', 5)
INSERT INTO SpaceMixes VALUES (2, 3, 'F', 3)
INSERT INTO SpaceMixes VALUES (2, 3, 'H', 5)
ли кто-нибудь знает, как исправить этот триггер, чтобы сделать эту сумму работу?
@ eqinna Это просто быстрый способ обозначить, что по запросу возвращается хотя бы одна запись. Просто выполните «SELECT TOP 1 NULL FROM SpaceMixes», когда SpaceMixes содержит хотя бы одну запись и когда SpaceMixes пуст, и вы увидите. –
@eqinna Относительно легко это исправить. –
@eqinna 'HAVING COUNT (*) = 3' гарантирует, что будут проверены только ** полные рабочие пространства ** –