你目前正处于脱机状态,正在等待 Internet 重新连接

UPDATE 语句可能会被复制为 DELETE/INSERT 对

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 238254
概要
如果是唯一约束的一部分的任何列进行更新,然后 SQL Server 实现更新作为一个"延迟更新",这作为一对的 DELETE 意味着 / INSERT 操作。此"延迟的更新"会导致复制,以发送一对的 DELETE / 给预订者的 INSERT 语句。此外,还有其他情况下,可能会导致延迟的更新的。因此,在 更新 触发器或在订阅服务器上的自定义存储的过程中执行的任何业务逻辑还中应包括的 DELETE / INSERT 触发器或自定义存储的过程。
更多信息
在事务复制中的默认行为是使用 INSERTUPDATEDELETE 的自定义存储的过程将应用订阅服务器上的更改。

在发布服务器上进行的 INSERT 语句将应用于订阅服务器通过一个 INSERT 存储过程调用。同样,删除 存储过程调用通过应用 DELETE 的语句。

但是,一个 UPDATE 语句将作为一个"延迟更新",日志读取器代理程序位置的 DELETE 对一个执行 / 时要应用于订阅服务器,而不是更新分发数据库中的 INSERT 存储过程调用存储过程调用。例如对于假设您有一个名 TABLE1,为这些三列的发布表:
  • col1 int
  • col2 int
  • col3 varchar(30)。
TABLE1 上的只有唯一约束是在通过主键约束的 col1 上定义的。假定您有一条记录 (1,1,达拉斯)。

执行此代码时:
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'				
UPDATE 语句由 SQL Server 实现为一对的 DELETE / INSERT 语句,因为您正在更新 col1,已定义的唯一索引。因此,在日志读取器将 删除 一对 / 插入 分发数据库中调用。这会影响触发器或在订阅服务器上的自定义存储的过程中存在的任何业务逻辑。您应该体现在 删除插入 触发器或存储的过程来处理这种情况中其他业务逻辑。

您更愿意使用单个逻辑,而您希望所有 UPDATE 命令作为 DELETE 复制 / 插入 对,您可以启用此 Microsoft 知识库文章中所述的跟踪标志:
160181若要复制作为 DELETE/INSERT 对更新的 INF: 跟踪标记
此外,如果在出版物中使用水平筛选,并更新的行不符合筛选条件只 删除 过程调用是发送给预订者。如果以前更新的行不符合筛选条件,但在更新后满足搜索条件,通过复制过程是发送仅 插入 过程调用。

在前面的示例假定您还可以水平筛选 TABLE1 上定义: 其中 col2 = 达拉斯。如果在执行此代码:
UPDATE table1 set col2 = 'New York' where col1 = 3				
日志读取器代理程序的唯一位置 删除 一个存储过程调用,因为更新的行不满足水平筛选条件应用于订阅服务器。

现在如果您执行此代码:
UPDATE table1 set col2 = 'Dallas' where col1 = 3				
在日志读取器生成只 插入 该存储过程调用,因为该行以前不符合筛选条件。

尽管在发布服务器上已执行 UPDATE 操作,在订阅服务器上应用相应的命令。
参考
对于 SQL Server 2000 Service Pack 1 或更高版本中,请参阅下面 Microsoft 知识库中相应的文章:
302341INF: 新建跟踪标记为启用为事务复制的 Singleton 更新

警告:本文已自动翻译

属性

文章 ID:238254 - 上次审阅时间:05/12/2008 18:01:45 - 修订版本: 6.2

Microsoft SQL Server 2000 标准版, Microsoft SQL Server 7.0 标准版, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise

  • kbmt kbinfo KB238254 KbMtzh
反馈
ement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">