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

时间:2016-10-28 13:52:14

标签: visual-foxpro

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

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])

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

有人可以帮助修改我需要的语法吗?

1 个答案:

答案 0 :(得分:2)

我认为在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相同的代码,实现代码“今年的12月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:这个是您的表名:

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' )