数据库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
答案 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