我在两个不同的数据库(在同一台服务器上)中有两个表,可能具有不同的模式。Table 1
是master table
,所有的更新都会直接去那里。Table 2
将是mirrored
:我需要以某种方式实时保持表 2 与表 1 相同。
问题是表 2 可能有额外的列、不同的列数据类型、添加的主键、添加的外键等。尽管如此,表 2 需要支持某些遗留前端正在生成的所有查询。
我今天计划通过尝试在触发器内针对第二个数据库中的表 2 重新执行更新、插入和删除语句来反映这些可能“不同”的情况。如果触发器失败,整个操作就会失败,所以理论上这应该保持表相同。
不过,我一直坚持获取触发触发器的实际 sql 语句。
fn_get_sql
DECLARE @Handle varbinary(64)
select @Handle = sql_handle FROM master..sysprocesses WHERE spid = @@SPID
select text FROM ::fn_get_sql(@Handle)
这将返回触发器的 sql,而不是语句。
DBCC INPUTBUFFER(@@SPID)
这将返回 sql 语句的前 256 个字符.. 不够好。
我的第一个问题是:如何获取触发 sql 2000 中触发器的 sql 语句?
我的第二个问题是:有没有更好的方法来做到这一点?我可以使用复制来复制一个表与另一个表具有不同架构的表(额外的列,列的不同数据类型等)