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

时间:2017-01-11 19:43:54

标签: sql-server triggers sql-update linked-server

数据库Sql server 2008R

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

VN =卖方 CO =联系

CRM

+-------+-------+-----------+--------+-----------+------------+----------+--------+
| 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

1 个答案:

答案 0 :(得分:0)

NO。这不是案例表达的工作原理。 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