在我的软件中,我有一个运行数据库更新的进程,我需要将其应用于修补我们的最新版本。在我的最新脚本中,我想向具有用于复制设置的发布的表添加列。当我创建我的alter脚本来添加列时,我会收到一条消息,说明以下内容:
You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.
任何想法解决这个问题的最简单方法是什么?我是否必须编写删除出版物的脚本,然后重新添加它??
答案 0 :(得分:2)
本周我们遇到了这个问题,同时使用SQL Compare生成的脚本来同步我们的生产环境和开发环境。问题是由SQL Compare(或任何您正在使用的)启动具有比READ COMMITTED或REPEATABLE READ更高的隔离级别的事务的脚本引起的。
当你运行脚本的一部分时,帽子有ALTER TABLE来添加列,它启动对SQL复制代码的调用,该代码向订阅者传播ALTER TABLE命令。该代码无法在具有较高隔离级别的较大事务内执行。
我们使用的解决方案是编写复制脚本。删除该表上的复制。应用同步脚本。然后重新创建复制。
另一种方法是编辑同步脚本以更改事务的隔离级别或完全删除它。这不是我们想要做的事情,所以我们采用了前面提到的解决方案。
答案 1 :(得分:1)
要向表中添加新列并将其包含在现有发布中,您需要使用ALTER TABLE<表> ADD<列>发布者的语法。默认情况下,架构更改将传播到订阅者,发布属性 @replicate_ddl 必须设置为true。