t-sql如何创建一个连接2个服务器的触发器

时间:2015-07-31 12:46:44

标签: sql sql-server join triggers instances

我正在尝试在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

任何帮助都将不胜感激!!

1 个答案:

答案 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链接查询尽可能简单。