我正在运行 SQL Server 2008 Std,其中的数据库正在以“事务发布”的形式发布给单个订阅者。
我们无法对发布服务器上的表进行任何更改,除非收到“无法修改表,因为该表已发布以供复制”的提示。这似乎很奇怪,因为架构更改(或运行脚本来执行此操作)应该推送到订阅服务器。我们目前必须删除整个发布系统才能进行表更改。
我遗漏了什么?一定有办法更新发布者表吗?
谢谢!
答案1
您尝试进行的表修改很可能是在 SSMS 中的图形表设计器中完成的。通过图形设计器实现表更改的效果很差。
当您保存更改时,SSMS 会运行并将整个表复制到包含新设计的新表中,然后删除“旧”表并重命名新表以替换它。
请注意,列排序对于存储在 SQL Server 中的表来说影响不大,没有必要在表的“中间”添加新列,除非它看起来更美观:=)
由于您的表处于事务复制中,SSMS 无法执行后台删除表语句,因此您会收到所记录的错误消息。
要进行所需的更改(添加或删除列),您需要在 T-SQL 中执行命令
ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;
请注意,命令语法不一致(谢谢 MS!)。添加列不需要/允许指定关键字 COLUMN,而删除则需要指定关键字 COLUMN。
只要您的复制正确设置为复制架构更改,这些命令就会起作用并传播给订阅者。
可以通过这种方式对表进行更改,但更改主键除外。主键是事务复制工作所必需的,并且不能更改。如果您想更改这些列,则需要从复制中删除该项目。
希望有所帮助。