我有两个SQL Server数据库。
其中一个被用作Ruby On Rails系统的后端,我们正在从该系统过渡,但由于我们正在ASP.NET MVC中重写Ruby应用程序,该系统仍在使用中。
对于"用户"、"角色"one_answers"角色-用户"表,数据库具有相似但不完全相同的表。
我想创建某种类型的触发器,以便在对同一表的其他数据库进行修改时,更新每个数据库上的用户和角色用户表。
我不能只使用原始数据库上的users表,因为Ruby对密码有不同的哈希函数,但我想确保一个系统上的更改反映在另一个实例化器上。
我还想避免一个明显的问题,即一个数据库上的更新会触发另一个数据库的更新,从而触发第一个数据库的升级,并且这个过程会重复,直到服务器崩溃或类似的不希望发生的事情或死锁发生。
我不想使用数据库复制。
有没有一种简单的方法可以在每笔交易的基础上做到这一点?
编辑
触发因素在概念上是这样的:
USE Original;
GO
CREATE TRIGGER dbo.user_update
ON dbo.user WITH EXECUTE AS [cross table user identity]
AFTER UPDATE
AS
BEGIN
UPDATE Another.dbo.users SET column1=value1, etc., WHERE inserted.ID = Another.dbo.users.ID;
END
我试图避免的问题是递归调用。
Another.dbo.user将有一个类似的触发器,因为这两个数据库有不同类型的应用程序,一个是Ruby on Rails,另一个是ASP.NET MVC,它们可能正在处理两个数据库上应该相同的数据。
如果可能的话,我会在两个表中都添加一个字段。添加或更新表时,"check"字段将设置为0。触发器会查看此字段,如果它是0,由应用程序事件生成,则触发器会将插入/更新触发到第二个表中,但检查字段将具有1而不是0。
因此,当触发器在第二个表上触发时,它将跳过插入第一个表的操作。
这将解决递归问题。
如果由于某些原因无法添加校验字段,则可以使用一个单独的表,其中包含表和校验字段的主键。这需要更多的编码,但也可以。