2つのテーブルOrder
とOrder_Product
があります。 Order_Product
の各製品には、製品データが電子メールで送信されたかどうかを示すフラグ(IsEmailed
)があります。オーダーのすべての製品は電子メールで送信されている場合は、私は2SQL Server:別のテーブルのすべての行が条件に一致する場合のテーブルの更新
のOrder_Status_Id
次のコードを持っているOrder
テーブルを変更する必要があり、サブクエリの任意の行でOP.IsEmailed = 1
場合、ステータスが変更されます、これは正しくありません。 OP.IsEmailed = 1
をALLの場合はOrdered_Product_2016
サブクエリに変更する必要があります。誰も私に手を貸すことができますか?
CREATE PROCEDURE Update_Order_Status
@Order_Ids [dbo].Id_List READONLY
AS
BEGIN
SET NOCOUNT ON;
UPDATE Order_2016
SET Order_Status_Id = 2 -- status of 2 means emails have been sent for all products on this order
FROM Order_2016
WHERE Order_Id IN (SELECT Order_Id
FROM Ordered_Product_2016 OP
WHERE OP.Order_Id IN (SELECT Id FROM @Order_Ids)
AND OP.IsEmailed = 1)
END
GO
編集 - 私は以下のようにそれを達成するが、より良い方法がなければならない把握することができます。
CREATE PROCEDURE Update_Order_Status
@Order_Ids [dbo].Id_List READONLY
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS(SELECT Order_Id FROM Ordered_Product_2016
WHERE Order_Id IN (SELECT Id FROM @Order_Ids)
AND (IsEmailed = 0 OR IsEmailed IS NULL))
BEGIN;
UPDATE Order_2016
SET Order_Status_Id = 2 -- status of 2 means emails have been sent for all products on this order
FROM Order_2016
WHERE Order_Id IN (SELECT Order_Id
FROM Ordered_Product_2016 OP
WHERE OP.Order_Id IN (SELECT Id FROM @Order_Ids)
AND OP.IsEmailed = 1)
END;
END
GO
おかげで、intitial答えを試してみましたが、元の質問と同じ問題に遭遇しました –