我正在尝试在2个SQL Server实例上完成触发器。我正在运行MS Dynamics ERP设置CRM& GP。一旦更新发生在另一个表上,我需要从一个服务器中删除数据。我编写了一个脚本,如果我在同一个实例上有2个DB,它将完成此任务。但是,当我尝试通过修改代码来调用其他服务器时,我只会遇到错误。
我在服务器SQL12 \ CRM实例CRM_MSCRM DB上有一个表。而另一个位于服务器SQL12主实例Comp1 DB上。这是我的代码:
USE [CRM_MSCRM]
GO
/****** Object: Trigger [dbo].[trgDeleteEmpAccList_Weld] Script Date: 7/31/2015 7:45:53 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[trgDeleteEmpAccList_Weld]
ON [dbo].[Cfs_jobBase]
AFTER INSERT, UPDATE
AS
BEGIN
DELETE p
FROM [SQL12].[CFSPR].[dbo].[PA01408] p
INNER JOIN [CRM_MSCRM].[dbo].[Cfs_jobbase] j
ON p.paprojnumber COLLATE Latin1_General_CI_AS = j.cfs_jobnumber COLLATE Latin1_General_CI_AS
INNER JOIN FROM [SQL12].[CFSPR].[dbo].[UPR00100] e
ON p.EMPLOYID = e.employid
WHERE (j.statuscode = 2 OR j.statuscode = 5) AND (e.DEPRTMNT = 'THERM' OR j.cfs_enddate <=DATEADD(day,-2,getdate()))
PRINT 'AFTER UPDATE Trigger fired.'
END
GO
我收到Comp1表项无效对象的错误。我已将其他服务器添加为链接服务器以尝试绕过此问题,但仍然会发生。
下划线错误的屏幕截图:
! [1]:http://i.imgur.com/fNo5sPs.png
任何帮助都将不胜感激!!
答案 0 :(得分:0)
我认为您正在寻找的是Linked SQL Server。易于设置,允许从一台服务器访问链接服务器。
以下是有关如何设置此内容的链接。 http://www.codeproject.com/Articles/35943/How-to-Config-Linked-Servers-in-a-Minute
然后您可以使用[server]。[database]。[schema]。[table]。来查询链接服务器 例如:选择* FROM DatabaseServer1.db1.dbo.table1。
正如其他人提到的,请注意性能损失。本地表和链接服务器表之间的连接操作非常慢。为了加快查询速度,将链接服务器上所需的数据查询到表变量是一种方法。 Keek链接查询尽可能简单。