在状态中输入特定值时触发更新链接服务器名称记录
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
数据库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