运行数据库复制时的表修改(MS SQL 2008)

我正在运行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是事务复制工作所必需的,不能改变。 如果您想更改这些列,您需要从复制中删除文章。

希望有所帮助。