我正在运行SQL Server 2008标准版,将数据库发布到单个订户的“事务性发布”中。
我们无法对发布者上的表进行任何更改,而无法获取“无法修改表,因为它已发布用于复制”。 这似乎很奇怪,因为模式更改(或脚本运行来执行此操作)应该推送给订阅者。 我们现在不得不放弃整个发布系统来更改表格。
我错过了什么? 必须有方法来更新发布者表?
谢谢!
您正在尝试执行的表修改最有可能在SSMS中的graphics表devise器中完成。 通过graphicsdevise器执行表更改是很差的。
保存更改后,SSMS将运行并将整个表格复制到新的devise中,然后删除“旧”表并重命名新的表以replace它。
请注意,列sorting对存储在SQL Server中的表没有什么影响,不需要在表的“中间”添加新的列,除非它看起来更好:=)
由于您的表在事务复制中,SSMS无法执行背景drop table语句,并且您收到了您记下的错误消息。
要进行所需的更改(添加或删除列),需要在T-SQL中执行命令
ALTER TABLE dbo.Table ADD NewCol int NULL; ALTER TABLE dbo.Table DROP COLUMN NewCol;
请注意,命令语法是不一致的(谢谢MS!)。 添加列不需要/允许指定关键字COLUMN,其中删除需要它。
只要您的复制正确设置为复制模式更改,这些命令将工作并传播给订阅者。
可以通过这种方式更改表格,但更改主键除外。 PK是事务复制工作所必需的,不能改变。 如果您想更改这些列,您需要从复制中删除文章。
希望有所帮助。