2012-12-10 1 views
0

내가 노력하고 내가이 오류 메시지가 얻을이 문장 실행 : 내가하지만 전에이 오류 메시지를받은오류 메시지 4145, 수준 15, 상태 1, 부울이 아닌 유형의 표현

Msg 4145, Level 15, State 1, Procedure tr_check_qty, Line 8
An expression of non-boolean type specified in a context where a condition is expected, near 'BEGIN'

을 이번에 그것을 고치는 법을 알아낼 수 없습니다. 나는 이것에 관해 생계를 꾸미기 위해 프로그램을하는 사람도 있었는데, 그가 지쳐서 바쁜 동안 그는 나의 통어론에 문제를 찾을 수 없었다. 도움!

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 

을하지만 지금은이 오류를 받고 있어요 :

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 

좋아, 지금이 문을 실행할 수 있습니다

Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'quantity' to data type int.

나는 방아쇠 다음이 문을 excecute 할 때 :

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

답변

1

if 문에 비교가 없습니다. 아마도 다음과 같은 의미 일 것입니다.

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

행이 반환되는지 확인합니다.

+0

처럼, 너무, 당신의 삽입 된 행을 참조 할 필요가 있다고 생각합니다. 그것이 무엇을 언급하고 있는지 불분명합니다. quantity_in_stock 및 unis_on_order의 데이터 유형은 무엇입니까? –

+0

둘 다 int입니다. 이 명령문에서 영감을 얻은 원래의 질문은 order_details 테이블에서 tr_check_qty라는 INSERT 및 UPDATE 트리거를 작성하여 재고 수량이 주문한 단위보다 크거나 같은 제품의 주문 만 허용하는 것입니다. 트리거를 확인하려면 다음 쿼리를 실행하십시오. UPDATE order_details SET 수량 = 30 WHERE order_id = 10044 AND product_id = 7; GO – isolatedhowl

1

난 당신이 당신이 트리거 "수량"라는 어떤 변수가없는 here

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 
관련 문제