获取关键字';附近的错误语法;作为';。将mysql查询转换为sql时

获取关键字';附近的错误语法;作为';。将mysql查询转换为sql时,sql,sql-server,tsql,join,sql-update,Sql,Sql Server,Tsql,Join,Sql Update,我正在将mysql转换为sql查询,为了在sql server中运行查询,我做了很多更改,但仍然在关键字“as”附近出现错误语法错误。,有人能帮我解释为什么会出现此错误吗?这是我的疑问 UPDATE tb_EpVisitRange as v left JOIN tb_Episode as e ON v.BranchID = e.BranchID AND v.company_id = e.CustID AND v.CMW = e.CMW SET e.EpVisit

我正在将mysql转换为sql查询,为了在sql server中运行查询,我做了很多更改,但仍然在关键字“as”附近出现错误
语法错误。
,有人能帮我解释为什么会出现此错误吗?这是我的疑问

UPDATE tb_EpVisitRange as v 
left JOIN tb_Episode as e 
  ON v.BranchID   = e.BranchID 
 AND v.company_id = e.CustID 
 AND v.CMW        = e.CMW
SET
e.EpVisitCount = IIF(PayerType = 'NonEp', 0, IIF(LUPA = 1, 0, v.High)),
e.VisitAlert = IIF(Status = 'Closed', 0, IIF((IIF(PayerType = 'NonEp', 0, IIF(LUPA = 1, 0, v.High))) > 0, 1, 0))
where  billed_flag = '0';

SQL Server中的正确语法为:

UPDATE e
    SET EpVisitCount = (CASE WHEN PayerType = 'NonEp' THEN 0
                             WHEN LUPA = 1 THEN 0
                             ELSE v.High
                        END),
        VisitAlert = (CASE WHEN Status = 'Closed' THEN 0
                           WHEN PayerType = 'NonEp' THEN 0
                           WHEN LUPA = 1 THEN 0
                           WHEN v.High > 0 THEN 1
                           ELSE 0
                      END)
    FROM tb_EpVisitRange v JOIN
         tb_Episode e
         ON v.BranchID = e.BranchID AND v.company_id = e.CustID AND v.CMW = e.CMW
    WHERE billed_flag = 0;
注:

  • 如果要使用数据库,请学习正确的SQL Server语法
  • 使用
    案例
    ;它是正确的SQL,可以在所有正确的数据库中工作。如果您有多个条件,则尤其如此
  • 如果要更新
    e
    ,则需要
    内部联接
    或使
    e
    成为
    左联接中的第一个表
    。更新不匹配的行没有意义
  • billed_flag
    大概是一个数字,因此不要在比较值周围使用引号

SQL Server中的正确语法是:

UPDATE e
    SET EpVisitCount = (CASE WHEN PayerType = 'NonEp' THEN 0
                             WHEN LUPA = 1 THEN 0
                             ELSE v.High
                        END),
        VisitAlert = (CASE WHEN Status = 'Closed' THEN 0
                           WHEN PayerType = 'NonEp' THEN 0
                           WHEN LUPA = 1 THEN 0
                           WHEN v.High > 0 THEN 1
                           ELSE 0
                      END)
    FROM tb_EpVisitRange v JOIN
         tb_Episode e
         ON v.BranchID = e.BranchID AND v.company_id = e.CustID AND v.CMW = e.CMW
    WHERE billed_flag = 0;
注:

  • 如果要使用数据库,请学习正确的SQL Server语法
  • 使用
    案例
    ;它是正确的SQL,可以在所有正确的数据库中工作。如果您有多个条件,则尤其如此
  • 如果要更新
    e
    ,则需要
    内部联接
    或使
    e
    成为
    左联接中的第一个表
    。更新不匹配的行没有意义
  • billed_flag
    大概是一个数字,因此不要在比较值周围使用引号

您正在尝试更新此处连接左侧的表。如果找不到记录,您希望做什么..?这在MySql上确实有效吗?如果是这样,这是不使用MySql的另一个原因。我对它了解得越多,我就越不喜欢它。更新在v上,但设置在e上。它还有其他问题。在这里更新左连接没有意义。如果记录不存在,则没有要更新的内容。可能与您试图更新此处联接左侧的表时遇到的问题完全相同。如果找不到记录,您希望做什么..?这在MySql上确实有效吗?如果是这样,这是不使用MySql的另一个原因。我对它了解得越多,我就越不喜欢它。更新在v上,但设置在e上。它还有其他问题。在这里更新左连接没有意义。如果记录不存在,则无需更新。可能与记录相同的问题重复