【问题标题】:Can you update using a LIKE operator on JOIN w/ TSQL?您可以在 JOIN w/TSQL 上使用 LIKE 运算符进行更新吗?
【发布时间】:2010-10-10 10:11:57
【问题描述】:

我正在从逗号分隔文件进行大量导入,并希望在导入过程结束时执行的存储过程中查找雇主 ID。我遇到的问题是我的 LIKE 似乎不起作用......所以我想看看语法是否正确。

注意 - 这将更新所有记录 = 雇主名称,但不会更新任何像 'foo%' 之类的东西

UPDATE UnitOfWork
SET EmployerId = SG.EmployerId
FROM UnitOfWork UO    
LEFT JOIN SpecialtyGroup SG ON SG.Name LIKE UO.EmployerName + '%'
WHERE SG.EmployerId IS NOT NULL

是否可以以这种方式进行 LIKE,或者我是否需要在此加入之外进行另一次更新?

【问题讨论】:

    标签: tsql join sql-like


    【解决方案1】:

    在 JOIN 中使用 LIKE 通常会引起我注意的是 CHAR 数据类型,您需要记住在添加 % 之前执行 RTRIM

    【讨论】:

      【解决方案2】:

      对于MS SQL 2008

      MERGE
      UnitOfWork UO
      USING SpecialtyGroup SG
         ON SG.Name LIKE UO.EmployerName + '%'
      WHEN MATCHED THEN
         UPDATE
         SET UO.EmployerId = SG.EmployerId
      

      对于MS SQL 2005

      WITH so AS
      (
        SELECT UO.EmployerID, SG.EmployerID AS newEmployerID
        FROM UnitOfWork UO    
        LEFT JOIN SpecialtyGroup SG ON SG.Name LIKE UO.EmployerName + '%'
        WHERE SG.EmployerId IS NOT NULL
      ) 
      UPDATE so
      SET EmployerId = newEmployerID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 2016-02-15
        相关资源
        最近更新 更多