【问题标题】:Merge Syntax is not correct合并语法不正确
【发布时间】:2019-11-21 00:07:43
【问题描述】:

我有以下脚本,我正在使用它来更新表中的列,但是我遗漏了一些东西。有人可以帮忙吗。基本上,该脚本通过匹配名称、地址的子字符串来连接两个表以找到匹配项,但实际 MERGE 的语法不起作用。我可以在 MERGE 代码之外毫无问题地运行脚本,它会显示匹配项。问题是当我使用 MEGRE 代码进行更新时。

Merge Solicitor_Prospects AS T
USING
(
/* ------------------------------------------------ */
select *
  from  (SELECT
          S.[id_Number],
          S.[mrn],
          S.CnBio_First_Name,
          S.CnBio_Last_Name ,
          S.CnAdrAll_1_01_Addrline1,
          S.CnAdrAll_1_01_ZIP,
          S.CnBio_Name,
          S.CnBio_ID,
          S.CnBio_Last_Name+LEFT(S.CnBio_First_Name,3)+MED.DBO.RemoveSpecialChars(LEFT(MED.DBO.Format_address(S.CnAdrAll_1_01_Addrline1,1),5))+left(S.CnAdrAll_1_01_ZIP,5) as DUP_KEY,

          'Address 1 Line 1' As Dup_Source
FROM Solicitor_Prospects AS S
WHERE S.CnAdrAll_1_01_Addrline1 IS NOT NULL) AS p
   join (select s.* from med..LMC_ENTITY s
        ) AS awa on p.CnBio_First_Name = awa.First_Name and p.CnBio_Last_Name = awa.Last_Name and
                 left(p.CnAdrAll_1_01_ZIP,5) = left(awa.Pref_Zip,5) and
                 left(med.[dbo].[fn_remove_char](med.[dbo].[Format_address](p.CnAdrAll_1_01_Addrline1,1)),5) = left(med.[dbo].[fn_remove_char](med.[dbo].[Format_address](awa.Pref_Line1,1)),5)
                 where LEN(p.Dup_Source) > 1
/* ------------------------------------------------ */
)
WHEN MATCHED
       THEN UPDATE SET T.ID_NUMBER = S.IN_NUMBER
GO

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server syntax


【解决方案1】:

试试这个:

Merge Solicitor_Prospects AS T
USING
(
/* ------------------------------------------------ */
select *
  from  (SELECT
          S.[id_Number],
          S.[mrn],
          S.CnBio_First_Name,
          S.CnBio_Last_Name ,
          S.CnAdrAll_1_01_Addrline1,
          S.CnAdrAll_1_01_ZIP,
          S.CnBio_Name,
          S.CnBio_ID,
          S.CnBio_Last_Name+LEFT(S.CnBio_First_Name,3)+MED.DBO.RemoveSpecialChars(LEFT(MED.DBO.Format_address(S.CnAdrAll_1_01_Addrline1,1),5))+left(S.CnAdrAll_1_01_ZIP,5) as DUP_KEY,

          'Address 1 Line 1' As Dup_Source
FROM Solicitor_Prospects AS S
WHERE S.CnAdrAll_1_01_Addrline1 IS NOT NULL) AS p
   join (select s.* from med..LMC_ENTITY s
        ) AS awa on p.CnBio_First_Name = awa.First_Name and p.CnBio_Last_Name = awa.Last_Name and
                 left(p.CnAdrAll_1_01_ZIP,5) = left(awa.Pref_Zip,5) and
                 left(med.[dbo].[fn_remove_char](med.[dbo].[Format_address](p.CnAdrAll_1_01_Addrline1,1)),5) = left(med.[dbo].[fn_remove_char](med.[dbo].[Format_address](awa.Pref_Line1,1)),5)
                 where LEN(p.Dup_Source) > 1
/* ------------------------------------------------ */
) S on S.ID_NUMBER = T.ID_NUMBER -- !!! You forgot alias and condition. I took ID_NUMBER, but I think you should write here other columns (which should be used for to link target and source sets) !!!
WHEN MATCHED
       THEN UPDATE SET T.ID_NUMBER = S.IN_NUMBER
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2020-10-30
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多