저는 SQL Server를 처음 접했고 CASE 내에서 WHERE 문을 구현하는 데 어려움을 겪고 있습니다.SQL Server - 케이스 내부 어디에 있습니까?
Receipt(ItemID,Quantity)
및
Warehouses(WarehouseID,Stock)
|WarehouseID|Stock|
-------------------
|ARM01 |100 |
|ARM02 |100 |
주어진 항목의 특정 수량 행을 삽입 변경 또는 수신에 제거되었는지 트리거 확인 :
난 다음 필드 2 개 테이블이 그런 다음 창고 테이블의 재고를 뺍니다.
영수증에 200 개의 수량이있는 행을 추가하면 WarehouseID 'ARM01'의 재고에서 100을 뺀다. 'ARM01'에 재고가 남아 있지 않으면 100), 'ARM02'에서 다른 100을 뺍니다. 물론 'ARM02'에 0의 재고가있는 경우 오류가 인쇄되지만 나중에 걱정할 것입니다.
SQL Server는 CASE 내에서 WHERE를 허용하지 않습니다. 물론 CASE가 이미 SET 문에 포함되어 있으며 WHERE는 SET 뒤에 있어야하기 때문입니다. 이상한 일이지만, 그런 간단한 일로 온라인에서 답을 찾을 수 없었습니다.
내 목표 : 나는 또한 주식의 미적분학을 실현
CASE 1
UPDATE 'Stock of Table' where 'WarehouseID of Same Table' = 'ARM01'
CASE 2
UPDATE 'Stock of Table' where 'WarehouseID of Same Table' = 'ARM02'
-/+ 수량 반대로 지금은 잘못 될 수 있으며 나 또한 그런 다음에 의해 분리 된 후 괄호 안의 2 문이 그리고 첫 번째 100을 ARM01에 배포하고 나머지는 ARM02에 배포하려고했기 때문에 AND. 이것은 잘못된 코드에 대한 잘못된 정보 일 뿐이지 만, 지금은 WHERE 문을 사용할 위치를 알아 내고 싶습니다.
CREATE TRIGGER SubtractStock ON Receipt
FOR INSERT, UPDATE, DELETE
AS
[snipped UPDATE for deleted because it only exchanges '+' for '-' in the operation]
UPDATE Warehouses
SET Stock =
(CASE
WHEN inserted.Quantity <= Stock THEN Stock - Quantity WHERE WarehouseID = 'ARM01'
WHEN inserted.Quantity > Stock THEN (Stock - Quantity WHERE WarehouseID = 'ARM01')
AND (Quantity - Stock WHERE WarehouseID = 'ARM02')
END)
FROM inserted JOIN Warehouses ON inserted.ItemID = Warehouses.ItemID
고마워요!
을 적절한 별칭을 사용합니다. 나는 트리거를 만드는 방법을 배운 후에 개인 프로젝트를위한 연습으로 이것을하고 있었기 때문에 복잡한 접근법이 최선의 아이디어가 아닐 수도 있습니다. 다음에해야 할 일에 대한 당신의 설명은 내가 예상했던 것과 조금씩 일치합니다. 감사! – NinjaBaseballBatMan