Я новичок в SQL, но я пытаюсь создать триггер, который проверяет, что цены соответствующим образом изменены. Однако один из нужных мне столбцов взят из другой таблицы, и я не совсем уверен, как объявить эту переменную. Это моя текущая попытка.
Таблица ACCESSORY
является дочерней по отношению к таблице PRODUCT
, связанной с ProductCode
, и имеет только 1 другой столбец с именем Class
, который обозначает классификацию. Триггер, который я создал, в настоящее время предназначен для таблицы PRODUCT
, так как именно там записаны все цены.
CREATE TRIGGER PriceCheck1
ON PRODUCT
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ProductCode AS Char(6),
@ProductName AS VarChar(50),
@StockLevel AS Int,
@OldPrice AS Deciaml(10,2), @NewPrice AS Deciaml(10,2),
@ProductType AS VarChar(9)
--@Class AS VarChar(20)
SELECT
@ProductCode = ProductCode, @ProductName = ProductName,
@StockLevel = ProductStockLevel, @NewPrice = ProductPrice,
@ProductType = ProductType --@Class = Class
FROM
inserted;
--FROM #TempTable
SELECT
@ProductCode = ProductCode, @ProductName = ProductName,
@StockLevel = ProductStockLevel, @OldPrice = ProductPrice,
@ProductType = ProductType
FROM
deleted;
IF UPDATE(ProductPrice)
BEGIN
IF (@ProductType = 'Food Item' AND @NewPrice > 200)
BEGIN
RAISERROR('The price of food item cannot exceed $200.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE IF (@ProductType = 'Accessory' AND @NewPrice < 50)--AND @Class = 'Bed and Bedding'
BEGIN
RAISERROR('The price of any accessory with a classification that includes the word bed cannot be less than $50.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
PRINT 'Price of Product Code ' + @ProductCode + ' has been changed from $' + Cast(@OldPrice AS nVarChar(10)) + ' to $' + Cast(@NewPrice AS nVarChar(10)) + '.'
END
END
Триггер работает нормально, но теперь, когда я попытался вывести таблицу accessory
, триггер даже не срабатывает при обновлении таблицы. Также есть способ, где я могу распечатать цены с двумя десятичными знаками? В настоящее время они отбрасывают ошибку, что он не может преобразовать ее в десятичную из NVarChar, даже когда я использовал приведение.