Я создал триггер INSTEAD OF
, который должен запускаться при попытке вставить в представление продуктов, состоящее из 2 таблиц: Approved_Products
и Products
.
Моя точка зрения состоит в том, чтобы перенаправитьвставьте и вставьте данные в таблицу Approved_Products
.
Данные для вставки поступают от CURSOR, который содержит данные из кортежа, который я пытаюсь вставить.
Код выглядит следующим образом:
CREATE TABLE Product_Approval
(
Product_ID VARCHAR(100) NOT NULL PRIMARY KEY,
Type VARCHAR(100) NOT NULL,
Price REAL NOT NULL,
Name VARCHAR(100) NOT NULL,
Supplier_ID VARCHAR(100) NOT NULL
FOREIGN KEY REFERENCES SUPPLIERS(Supplier_ID),
CONSTRAINT Ck_Price CHECK (Price > 0)
)
CREATE VIEW vw_ProductList
AS
SELECT Product_ID, Type, Name, Price, Supplier_ID, 'Approved' Approval_Status
FROM dbo.PRODUCTS
UNION
SELECT Product_ID, Type, Name, Price, Supplier_ID, 'Pending Approval' Approval_Status
FROM dbo.Product_Approval
SELECT * FROM VW_ProductList
CREATE TRIGGER ProductApprovals
ON VW_ProductList
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE
@Product_ID VARCHAR(100),
@Type varchar(100),
@Name VARCHAR(100),
@Price REAL,
@Supplier_ID VARCHAR(100)
DECLARE CCC CURSOR
FOR (SELECT Product_ID, Type, Name, Price, Supplier_ID FROM INSERTED)
OPEN CCC
FETCH NEXT FROM CCC INTO @Product_ID, @Type, @Name, @Price, @Supplier_ID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Product_Approval
VALUES ('@Product_ID', '@Type', '@Name', @Price, '@Supplier_ID')
END
FETCH NEXT FROM CCC INTO @Product_ID, @Type, @Name, @Price, @Supplier_ID
CLOSE CCC
DEALLOCATE CCC
END
Я пытаюсь вставить
INSERT INTO VW_ProductList(Product_ID , Type , Name , Price , Supplier_ID)
VALUES ('0101010' , 'Whiskey' , 'Varmunollan' , '90' , '00000')
, но получаю ошибку:
Сообщение 8114, Уровень 16, Состояние 5, Процедура ProductApprovals,Строка 76
Ошибка преобразования типа данных varchar в вещественный.
Что я сделал не так?