日期:2014-05-18  浏览次数:20570 次

SQL 2005 事务执行之后再同步会出问题?
是这样的,有2个服务器,之间A做的是合并发布,B是订阅服务器,两者之间同步(1分钟一次大约)。
现在在B服务器上有更新一个表,且更新好几行数据(也就是把某一行的某些字段更新到另外一个符合条件的行,然后把旧的行的那些字段值清空,也就2行数据而已),如果把这两个更新操作分开来执行,A与B两个服务器都完全可以同步且数据是没有问题的。
但现在做了一个存储过程,把这两个更新操作放在这个事务中一起执行了,但问题也出来了,B服务器更新是可以的,但一同步就出问题:B上更新完毕之后1分钟之内数据是正常的,但当同步过程完成之后有可能(偶尔会出现,并不是全部,大部分时间同步都是正常的)会出现A、B服务器上的这两行数据被更新的这几个字段都是空值(旧的数据行原来不是空的,新的是空的,更新完了之后旧的是空的,新的不是空的),不知道大家是不是也碰到过这样的问题?

在同一台服务器上两个不同的数据库之间同步一个表也会出现这种情况,分开更新就没问题,合起来到一个事务中就会丢数据。

------解决方案--------------------
没看太懂,是说同步更新?
SQL code

DECLARE @table TABLE
    (
      col1 VARCHAR(20) ,
      col2 VARCHAR(20)
    )
INSERT  INTO @table  SELECT  'a' ,NULL
SELECT  *  FROM    @table
UPDATE  @table
SET     col1 = col2 ,
        col2 = col1
SELECT  *  FROM    @table

/*
更新前:
col1                 col2
-------------------- --------------------
a                    NULL
更新后:
col1                 col2
-------------------- --------------------
NULL                 a
*/