Ошибка преобразования типа данных varchar в реальный - PullRequest
0 голосов
/ 21 сентября 2019

Я создал триггер 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 в вещественный.

Что я сделал не так?

1 Ответ

0 голосов
/ 23 сентября 2019

Следует избегать вставки данных без явного перечисления столбцов.Ваша ошибка является точной причиной, почему.

INSERT INTO Product_Approval 
VALUES ('@Product_ID', '@Type', '@Name', @Price, '@Supplier_ID')

Порядок столбцов в таблице отличается от порядка в операторе INSERT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...