在输入特定值时触发更新链接服务器表

时间:2017-01-11 16:29:20

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

我正在同步两个独立的数据库应用程序。数据库是链接的服务器。一个是CRM,一个是ERP。当用户在CRM的quates表状态列中输入三个代码字符串之一时,需要在三个文本字符串之一时更新ERP的项目表状态。

CN=Converted
WO=Working
PN=Pending

CRM报价表

CompanyID QuoteID Status

用户输入(三个代码中的一个)

CN
WO
PN

ERP项目表

CompanyID ProjectID Status

状态更新为(三个字符串中的一个)

Converted
Working
Pending

好像有点像

UPDATE ERP.dbo.Projects
SET ERP.dbo.Projects.Status = 'Converted'
FROM Inserted.CRM.Projects
WHERE Inserted.CRM.Projects Status = 'CN'
INNER JOIN ERP.dbo.Project.ProjectID = CRM.dbo.Quotes.QuoteID

UPDATE ERP.dbo.Projects
SET ERP.dbo.Projects.Status = 'Working'
FROM Inserted.CRM.Projects
WHERE Inserted.CRM.Projects Status = 'WO'
INNER JOIN ERP.dbo.Project.ProjectID = CRM.dbo.Quotes.QuoteID

UPDATE ERP.dbo.Projects
SET ERP.dbo.Projects.Status = 'Pending'
FROM Inserted.CRM.Projects
WHERE Inserted.CRM.Projects Status = PN
INNER JOIN ERP.dbo.Project.ProjectID = CRM.dbo.Quotes.QuoteID

最好是使用case或if语句,还是为每个代码使用3个单独的触发器?

数据库:SQL Server 2008 R2

1 个答案:

答案 0 :(得分:0)

这里没有太多详细信息,但是您发布的更新中存在一些逻辑缺陷。我怀疑你想要更像这样的东西。

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