1

以下を選択し、正常に参加しました:

SELECT     
   WOEQLVW.WONUM, WOEQLVW.EQNUM, WOEVW.EMPCODE, WOEVW.WODATE, WOEVW.ESTHRS,   
   WOEVW.REGHRS, WO.WOTYPE, WO.ATFIRSTNAME, 
   WO.ATLASTNAME, WO.SCHEDSTARTDATE, WO.STATUS, WOEVW.EQNUM AS Expr1, WOEVW.LASTNAME
FROM         
   WOEQLVW 
LEFT OUTER JOIN
   WOEVW ON WOEQLVW.WONUM = WOEVW.WONUM 
LEFT OUTER JOIN
   WO ON WOEQLVW.WONUM = WO.WONUM
WHERE 
   (WO.SCHEDSTARTDATE > CONVERT(DATETIME, '2013-09-08 00:00:00', 102))  
   AND (WO.WOTYPE = 'SAFE-T') 
   AND (WO.STATUS = 'M')

私は最初に作る必要があります

WOEVW.EMPCODE = WO.ATLASTNAME
then, set WOEVW.ESTHRS and WOEVW.REGHRS = '1.00' 
then, set WOEVW.WODATE = WO.SCHEDSTARTDATE

テーブルにこれらの変更を加える前に、WHERE 句のすべての項目を適用する必要があります。

最初のクエリ (上記) の後に UPDATE と WHERE EXISTS を試しましたが、ビューを取得して更新を表示することはできませんでした。

UPDATE WOEVW
SET REGHRS = '1.00'
WHERE EXISTS (SELECT WO.WOTYPE
              FROM WO
              WHERE WO.WOTYPE = 'SAFE-T');

私が得た:

(影響を受ける 508 行)

(影響を受ける 564 行)

このタイプのレコードがちょうど 162 あるので、これは面倒です。SELECT ステートメントを再度使用しても、変更は見られません。

VW で終わる「テーブル」はビューであり、適切なテーブルではありません。結果を表示するプログラムは Infor/MP2 です。

4

1 に答える 1

0

これは機能しません。

SELECT WO.WOTYPE
FROM WO
WHERE WO.WOTYPE = 'SAFE-T'

を実行すると、162 のレコードが見つかります。次に、外側のクエリが実行されます。

UPDATE WOEVW
SET REGHRS = '1.00'
WHERE EXISTS

最初の行によっていずれかの行が返された場合、2 番目のコマンドはすべての行を更新します。求められているのは、何かが返された場合、true を返すということだけです。サブクエリを外部クエリにリンクする必要があるため、WOEVW のすべての行で WO がチェックされます。次のようなものを試すことができます:

UPDATE WOEVW
SET REGHRS = '1.00'
WHERE EXISTS (SELECT WO.WOTYPE
              FROM WO
              WHERE WO.WOTYPE = 'SAFE-T' AND WOEVW.WONUM = WO.WONUM );

必要に応じて、参加を試すこともできます。

UPDATE W1
SET REGHRS = '1.00'
FROM WOEVW W1
JOIN WO W2 ON  WOEVW.WONUM = WO.WONUM 
WHERE WO.WOTYPE = 'SAFE-T'

あなたの正確なテーブル構造がわからないので、 WOEVW.WONUM = WO.WONUM が正しい結合条件であるかどうかはわかりません。

更新が失敗した理由については、WOEVW のトリガーをチェックして、停止していないかどうかを確認してください。コミットするのを忘れた可能性もあります。

于 2013-09-26T22:33:53.793 に答える