Visual Foxpro 9 更新 table 基于另一个 table 的内容

Visual Foxpro 9 update table based on contents of another table

当我 运行 以下查询时,我正确地得到了我需要更改其中一列的行列表...

SELECT b.* from btable b JOIN ptable p ON p.p_empno = b.b_empno WHERE EMPTY(b.b_expdate) AND p.p_active <> [T] AND INLIST(b_beneid,[I],[S])

我的问题是,现在我需要使用相同的条件将 btable.b_expdate 更新为 {^2016-12-31},但无法完全获得有效的语法。 (几年前在foxpro工作,现在在MSSQL工作)

有人可以帮助澄清我需要的语法吗?

我认为它在 MSSQL 中是一样的(我会在那里写同样的东西,使用 '20161231' 或 datefromparts(2016,12,31) 而不是 {^2016/12/31} - 请注意,在 VFP 中 分号是命令行继续字符 ,而不是 MSSQL 中的语句结束字符):

UPDATE  bTable ;
SET     b_expdate = {^2016/12/31} ;
FROM    pTable p ;
WHERE   Empty(bTable.b_expdate) ;
        AND p.p_empno = bTable.b_empno ;
        AND p.p_active <> 'T' ;
        AND b_beneid IN ( 'I', 'S' )

编辑:也许您明年需要与 2017/12/31 相同的代码,改为实现 "this year's Dec 31" 的代码?如果是:

UPDATE  bTable ;
SET     b_expdate = Date(Year(Date()),12,31) ;
FROM    pTable p ;
WHERE   Empty(bTable.b_expdate) ;
        AND p.p_empno = bTable.b_empno ;
        AND p.p_active <> 'T' ;
        AND b_beneid IN ( 'I', 'S' )

EDIT2:这个是你的 table 名字:

UPDATE  hbene ;
SET     b_expdate = Date(Year(Date()),12,31) ;
FROM    hrpersnl p ;
WHERE   Empty(hbene.b_expdate) ;
        AND p.p_empno = hbene.b_empno ;
        AND p.p_active <> 'T' ;
        AND b_beneid IN ( 'I', 'S' )