0

Я синхронизую два отдельных приложения баз данных. Базы данных связаны с серверами. Один из них CRM, а один - ERP. Когда пользователь вводит одну из трех строк кода в столбце состояния таблицы quates в CRM, статус таблицы проекта для ERP должен обновляться в одной из трех текстовых строк.Триггер для обновления таблицы связанного сервера при вводе конкретных значений

CN=Converted 
WO=Working 
PN=Pending 

CRM Котировки Таблица

CompanyID QuoteID Status 

Пользователь вводит (1 из трех кодов)

CN 
WO 
PN 

Таблица ERP проекта

CompanyID ProjectID Status 

Статус обновлен до (1 из трех строк)

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 

было бы лучше использовать случай или если заявление или использовать 3 отдельные триггеры для каждого кода?

База данных: SQL Server 2008 R2

+0

Определенно не используйте 3 отдельных триггера. Это было бы совершенно безумно. Я бы сделал это одним оператором обновления с выражением case вместо 3 отдельных операторов обновления. И определенно НЕ утверждение IF, которое просто не имеет смысла в этом контексте вообще. –

ответ

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