关于 sql2000 动态触发器的问题

linzi_0535 2009-03-24 03:22:50
首先问下大侠 触发器 能不能动态?

条件
1。 有3个服务器 有一个名字相同的数据库 和一个名字结构相同的表
例如
服务器A --数据库D--表E
服务器B --数据库D--表E
服务器C --数据库D--表E

就是服务器A里面的表E 发生变化是 包括插入 删除 更新 的时候
服务器B和服务器C的数据库D中的表E也发生变化 ,时刻和服务器A里面的表E 数据保持一致。

目前我的做法是:

服务器A 表E里面触发器的代码


CREATE TRIGGER [表E_SamePeriod] ON [dbo].[表E]
FOR INSERT, UPDATE, DELETE
AS
SET XACT_ABORT ON
DELETE FROM 服务器B.数据库D.dbo.表E
INSERT INTO 服务器B.数据库D.dbo.表E
SELECT *
FROM
表E

DELETE FROM 服务器C.数据库D.dbo.表E
INSERT INTO 服务器C.数据库D.dbo.表E
SELECT *
FROM
表E



现在想用个动态表 里面包含的是服务器B,C的名字
怎么实现呢?

--动态表 table1
create table table1
(name varchar(20))
insert into table1
select '服务器B' union all
select '服务器C'


用动态表之后 如何写触发器呢?
就是通过动态表找到服务器的名字
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ks_reny 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 linzi_0535 的帖子:]
首先问下大侠 触发器 能不能动态?

条件
1。 有3个服务器 有一个名字相同的数据库 和一个名字结构相同的表
例如
服务器A --数据库D--表E
服务器B --数据库D--表E
服务器C --数据库D--表E

就是服务器A里面的表E 发生变化是 包括插入 删除 更新 的时候
服务器B和服务器C的数据库D中的表E也发生变化 ,时刻和服务器A里面的表E 数据保持一致。

目前我的做法是:

服务器A 表E里面触发器的代码


SQL…
[/Quote]
你這個思路不好吧,你每次都把原來的表先刪除,然後再全部插入,要是數據量大了,你這樣做是不是效率很低,而且容易產生死鎖.
你還是寫三個觸發器,每次只針對你變化的數據進行同步.在A庫中做插入時,同時對B庫,C庫進行插入,插入數據來源INSERTED.同樣在更新刪除時用同樣的方法處理.
claro 2009-03-24
  • 打赏
  • 举报
回复
帮顶
子陌红尘 2009-03-24
  • 打赏
  • 举报
回复
isnull()函数处理没写全,修改一下:

CREATE TRIGGER [表E_SamePeriod] ON [dbo].[表E]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON

DECLARE @SQL VARCHAR(8000)

SELECT @SQL=ISNULL(@SQL,'')+'
DELETE FROM ['+NAME+'.数据库D.dbo.表E]
INSERT INTO ['+NAME+'.数据库D.dbo.表E] SELECT * FROM [表E]
'
FROM TABLE1

EXEC(@SQL)
END
GO
子陌红尘 2009-03-24
  • 打赏
  • 举报
回复
TRY:

CREATE TRIGGER [表E_SamePeriod] ON [dbo].[表E]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON

DECLARE @SQL VARCHAR(8000)

SELECT @SQL=ISNULL(@SQL)+'
DELETE FROM ['+NAME+'.数据库D.dbo.表E]
INSERT INTO ['+NAME+'.数据库D.dbo.表E] SELECT * FROM [表E]
'
FROM TABLE1

EXEC(@SQL)
END
GO

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧