SQL Serverが新しく、CASE内のWHEREステートメントの実装に問題があります。具体的には、作業しているトリガです。SQL Server - ケース内にはどこですか?
Iは、以下のフィールドを持つ2つのテーブルを有する:
Receipt(ItemID,Quantity)
と
Warehouses(WarehouseID,Stock)
|WarehouseID|Stock|
-------------------
|ARM01 |100 |
|ARM02 |100 |
任意の所与のアイテムの特定数量を含む行は、挿入改変または受信に削除されたかどうかをトリガーチェックを倉庫テーブルの在庫を減算または追加します。
領収書に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'
私はまた、証券取引のための計算を実現 -/+数量およびその逆は今間違っているかもしれないと私はまた、THENの後の括弧内に2文を持っている、で区切られました最初の100をARM01に、残りをARM02に配布しようとしていたためです。おそらく、間違ったコードについては、間違っていると思いますが、今のところ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