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

如果第一行返回了任何行,则第二个命令将更新每一行。所有的问题是如果返回任何东西,它将返回 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 回答