SalesOrdersという名前のテーブルがあります。私はそれに複数のテーブルからデータをマージします。このテーブル内には、Ackという名前の列があります。この列は、行が挿入または更新されると(「C」コードで「Y」をトグルする)「N」に切り替わります。私が抱えている問題は、私がクエリを実行したときに、Ackが何か変更されたときにのみ「N」に変更することです。 WHEN MATCHED文で条件を追加しようとしましたが、変更があったときにテーブルが更新されません。SQLの条件付きマージ一致したときの更新列が等しくないときの更新
MERGE QA.dbo.SalesOrders AS TARGET USING(SELECT SOD.ORDNUM_28 +
LINNUM_28 + DELNUM_28 AS [SalesOrd], SOD.PRTNUM_28, PM.PMDES1_01,
SOD.CURDUE_28, SOD.DUEQTY_28, CPD.CUSTPRT_103, SOM.CUSTPO_27,
CPD.UDFREF_103, CPD.PRTNUM_103,SOD.CreationDate, CM.EMAIL1_23, SOD.ORDNUM_28
FROM SO_Detail AS SOD FULL OUTER JOIN
Customer_Part_Data AS CPD ON SOD.PRTNUM_28 = CPD.PRTNUM_103 FULL OUTER JOIN
SO_Master AS SOM ON SOD.ORDNUM_28 = SOM.ORDNUM_27 FULL OUTER JOIN
Part_Master AS PM ON SOD.PRTNUM_28 = PM.PRTNUM_01 FULL OUTER JOIN
Customer_Master AS CM ON SOD.CUSTID_28 = CUSTID_23
WHERE (STATUS_28 = '3') AND (SOD.CreationDate > '09/14/2017') AND
(CUSTPO_27 <> ' ') AND (SOM.STYPE_27 = 'CU')
AND (SOD.STK_28 NOT LIKE '%RMA%') AND (SOD.STYPE_28 = 'CU')) SOURCE
ON OrderNum = SOURCE.SalesOrd
WHEN MATCHED AND PartNum <> SOURCE.PRTNUM_28 OR Description <>
SOURCE.PMDES1_01 OR DueQty <> SOURCE.DUEQTY_28 OR CustPartNum <>
SOURCE.CUSTPRT_103 OR CustPo <> SOURCE.CUSTPO_27 OR CustRev <>
SOURCE.UDFREF_103 OR ShipDate <> SOURCE.CURDUE_28 OR email <>
SOURCE.EMAIL1_23 // This does not work
THEN
UPDATE
SET PartNum = SOURCE.PRTNUM_28, Description =
SOURCE.PMDES1_01, DueQty = SOURCE.DUEQTY_28, CustPartNum =
SOURCE.CUSTPRT_103, CustPo = SOURCE.CUSTPO_27, CustRev =
SOURCE.UDFREF_103, ShipDate = SOURCE.CURDUE_28, email = SOURCE.EMAIL1_23,
OrgDate = SOURCE.CreationDate, Ack = 'N'
私は(MATCHED WHEN後にすべてを)動作しませんどのようなコードで指摘 - 何かが変更されたときにエラーがちょうど更新されません。 ANDの後にコードを削除すると、すべてが更新されますが、クエリが実行されるたびに変更されるため、Ackが実際に変更されていないときに「N」に変更されます。
"それはうまくいかない"よりもうまくやらなくてはなりません。どういう意味ですか?その声明は、「私の車は動かない、修正してください」というメモをつけて整備士に車を降ろすようなものです。 –