在状态中输入特定值时触发更新链接服务器名称记录

Trigger to update a linked server name record when specific values are enterred in status

数据库Sql服务器2008R

我正在同步两个单独的数据库应用程序。数据库是链接服务器。一种是 CRM,一种是 ERP。当用户在 CRM 的名称 table 状态列中输入两个代码字符串之一时,ERP 的名称 table 记录需要使用 CRM 中的名称记录进行更新。

VN=供应商 CO=联系人

客户关系管理

+-------+-------+-----------+--------+-----------+------------+----------+--------+
| Names | Table | ContactID | TypeID | FirstName | MiddleName | LastName | Status |
+-------+-------+-----------+--------+-----------+------------+----------+--------+

用户在状态中输入(2 个代码中的 1 个)VN、CO

ERP

+-------+-------+-----------+--------+-----------+------------+----------+
| Names | Table | ContactID | TypeID | FirstName | MiddleName | LastName |
+-------+-------+-----------+--------+-----------+------------+----------+

CRM的姓名记录需要更新ERP的姓名记录

好像是这样的:

UPDATE n
    case i.Status
        when 'WO' then SET ERP.FirstName = i.FirstName, ERP.MiddleName = i.MiddleName, ERP.LastName = i.LastName
from inserted I
        when 'PN' then SET ERP.FirstName = i.FirstName, ERP.MiddleName = i.MiddleName, ERP.LastName = i.LastName
     end
from inserted i
INNER JOIN CRM.dbo.Names n on n.CompanyID = i.CompanyID

没有。这不是 case 表达式的工作方式。 case 表达式用于控制单个列的值。您需要更新多个列。使用我在您之前关于此主题的问题中发布的代码,您只需要像这样添加三个新列。

UPDATE p
SET Status = 
    case i.Status when 'CN' then'Converted'
        when 'WO' then 'Working'
        when 'PN' then 'Pending'
    end
    , FirstName = i.FirstName
    , MiddleName = i.MiddleName
    , LastName = i.LastName
from inserted i
INNER JOIN CRM.dbo.Projects p on p.ProjectID = i.QuoteID

--编辑--

根据您最近的评论,我认为您可能想要类似的东西。请注意,已添加 case 表达式中的 else 谓词。

UPDATE p
SET Status = 
    case i.Status when 'CN' then'Converted'
        when 'WO' then 'Working'
        when 'PN' then 'Pending'
        else p.Status
    end
    , FirstName = i.FirstName
    , MiddleName = i.MiddleName
    , LastName = i.LastName
from inserted i
INNER JOIN CRM.dbo.Projects p on p.ProjectID = i.QuoteID