SQL触发器ALTER_TABLE需要能够更改另一个数据库中的表

SQL触发器ALTER_TABLE需要能够更改另一个数据库中的表,sql,sql-server,Sql,Sql Server,我有两个数据库,tempdblog和testdblog。我试图弄清楚,当我在tempdblog上修改一个表时,如何在testdblog上执行完全相同的命令,我不希望传输行,我严格要求传输列 下面是我从一个站点获得的atm,我试图添加一个“USE testdblog”,但它在我的回复中错误地指出“不允许使用语句…”以及“必须声明标量变量@test” 新列名可以是任何名称,我只知道它不是“将此列添加到表的末尾”,更像是“在userdef0列之前添加此列” 我将它在主数据库上运行的SQL查询存储起来,

我有两个数据库,tempdblog和testdblog。我试图弄清楚,当我在tempdblog上修改一个表时,如何在testdblog上执行完全相同的命令,我不希望传输行,我严格要求传输列

下面是我从一个站点获得的atm,我试图添加一个“USE testdblog”,但它在我的回复中错误地指出“不允许使用语句…”以及“必须声明标量变量@test”

新列名可以是任何名称,我只知道它不是“将此列添加到表的末尾”,更像是“在userdef0列之前添加此列”

我将它在主数据库上运行的SQL查询存储起来,并尝试在另一个表上重新执行它,这只是找出如何更改数据库的问题

USE tempdblog
GO
ALTER TRIGGER [db_LOG]

ON DATABASE
FOR ALTER_TABLE
AS
      SET NOCOUNT ON
      DECLARE @xEvent XML
      DECLARE @tests nvarchar(MAX)
      SET @xEvent = eventdata()
      SET @tests = CONVERT(VARCHAR(MAX), @xEvent.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)'))

      exec testdblog..sp_executesql @tests;
GO

那里不能有
GO
命令。一旦构造了有效的动态SQL语句(现在没有),您还应该尝试:

EXEC testdblog..sp_executesql @test;
或者简单地说:

INSERT INTO testdblog.dbo.dbLog(columns) VALUES(...);

我清理了触发器以删除日志插入,因为我可以稍后处理。触发器需要在另一个数据库的另一个表上复制相同的ALTER TABLE语句。根据我所做的更改,当我运行alter语句时,我会得到“无法修改表。靠近&”的语法不正确。请尝试将您尝试执行的命令存储在表中并检查它。听起来它所拉取的命令是XML实体化的,例如,
被更改为
。永远不要盲目地执行未经验证的代码。PS这似乎是执行镜像或复制的非常昂贵的方法。我假设您希望维护相同的模式,但不希望维护相同的数据?也就是说,我目前在所有表上都有删除触发器,这些表将删除内容移动到此相同的数据库,但现在每当我的一个用户更改字段时,应用程序都会添加/删除与该表相关的列。我宁愿让这个脚本去做(不是经常做),也不愿让别人做一个改变,然后想知道为什么程序开始产生错误。顺便说一句,我在@tests上做了一个插入,得到了“altertable dbo.TABLE_1 ADD ;test2 varchar(50)NULL ;”