日期:2014-05-17  浏览次数:20597 次

跨服务器的触发器
现在分别有两个数据库在两台服务器上,比如说是1 和 2 服务器。
现在要对1服务器里数据库的某个表进行操作(增删改)的时候,2服务器对应的数据库的这个表也要做出及时的更新(增删改)。

这样的触发器如何写?

------解决方案--------------------
试下开启跨服务器连接,然后使用[服务器名].[数据库名].[架构名].[表名].[列名]这样来实现跨服务器访问。
------解决方案--------------------
SQL code
-- Step 1 :创建链接服务器、及其登录授权(在本地1服务器某数据库test执行)
--创建链接服务器 
-- 示例代码:
 exec sp_addlinkedserver   'datebasename ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
 exec sp_addlinkedsrvlogin  'datebasename ', 'false ',null, '用户名 ', '密码 '

-- step 2:创建触发器tri_1_2
CREATE TRIGGER tri_1_2 
ON [dbo].[test]
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON
  SET XACT_ABORT ON 
  DECLARE @id INT, @name VARCHAR(20);
IF EXISTS(SELECT COUNT(*) FROM INSERTED WHERE 
                       NOT EXISTS(SEKECT * FROM test))>0
  BEGIN 
      SELECT @id=id,@name=name from INSERTED  WHERE 
                       NOT EXISTS(SEKECT id,name FROM test)
      INSERT INTO srvname.dbname.dbo.test2(id,name) VALUES(@id,@name);
END
GO

------解决方案--------------------
要打开SET XACT_ABORT ON 另外,查询/更新都是用链接服务器名.数据库名.dbo.表名称这样操作.

------解决方案--------------------
你说的这个为什么不用订阅和发布功能呢