0

当我尝试执行此语句时,我收到此错误消息:

消息 4145,级别 15,状态 1,过程 tr_check_qty,第 8 行
在预期条件的上下文中指定的非布尔类型表达式,靠近“开始”

我之前收到过此错误消息,但这次我不知道如何修复它。我什至让一个以编程为生的人看着这个,当他又累又忙的时候,他找不到我的语法问题。帮助!

CREATE TRIGGER tr_check_qty
ON order_details
FOR INSERT, UPDATE
AS
   IF (SELECT quantity_in_stock
       FROM products
       WHERE quantity_in_stock >= units_on_order)
   BEGIN
      PRINT 'Insert/Update Not Allowed: quantity_in_stock less than units_on_order.'
      ROLLBACK TRANSACTION
   END;
GO

好的,所以我现在可以执行此语句:

CREATE TRIGGER      tr_check_qty
ON                  order_details
FOR INSERT, UPDATE
AS
IF EXISTS           (   SELECT      COUNT(inserted.order_id)
                    FROM        inserted
                    INNER JOIN  products ON products.product_id=inserted.product_id
                    WHERE       inserted.quantity>products.quantity_in_stock)
BEGIN
PRINT 'Insert/Update Not Allowed: quantity_in_stock less than units_on_order.'
ROLLBACK TRANSACTION
END;
GO

但现在我收到了这个错误:

消息 245,级别 16,状态 1,行 1 将 varchar 值“数量”转换为数据类型 int 时转换失败。

当我尝试在触发器之后执行此语句时:

UPDATE order_details
SET quantity=30
WHERE order_id=10044 AND product_id=7;
GO
4

2 回答 2

1

你的if说法没有可比性。也许你的意思是这样的:

IF   EXISTS (   SELECT      quantity_in_stock
                FROM        products
                WHERE       quantity_in_stock >= units_on_order )

查看是否返回任何行。

于 2012-12-10T19:48:34.950 回答
1

我认为您也需要引用插入的行,就像这里

CREATE TRIGGER tr_check_qty
3>    ON order_details
4>    FOR INSERT, UPDATE
5> AS
6>    IF EXISTS
7>       (
8>        SELECT 'True'
9>        FROM Inserted i
10>        JOIN products p
11>          ON i.ID = p.ID
          WHERE       quantity_in_stock >= units_on_order
12>       )
13>    BEGIN
14>        PRINT 'Insert/Update Not Allowed: quantity_in_stock less than units_on_order.'
15>        ROLLBACK TRAN
16> END
于 2012-12-10T19:49:45.793 回答