none
只有该修改主键时才出现开放式并发冲突? RRS feed

  • 问题

  • 我使用的开发环境时vs2008 + sqlserver2005

    在开发过程中遇到以下两个问题:

    1、只有在修改数据表的主键时才会抛出开放式并发冲突,而修改非主键列时却不会出现开放式并发冲突;

    2、关于下面这部分内容,有哪位高手能帮忙解释下,或者告诉我哪里有相关的文章可以看,我已经在网上找了2天了,也没有找到关于timestamp的详解介绍,MSDN写的也非常少。

    显示数据时先取出timestamp到变量
    
    更新,删除操作时先比较变量和现在的timestamp, 一样则操作 
    
    什么问题,转成byte[]

     

    希望能尽快有人答复,先谢谢了。

    2011年3月2日 8:58

答案

  • 你好!

    1 既然是主键就不要去修改,否则可能会引起数据异常

    2 一般会在服务端将 timestamp 转换成 int 后再进行相应的比较。 如:select ... CAST(ColTimestamp as int) from tableName 

    当然客户端(DataSet 中)也可以将 byte[] 转换为 int 但这显然要麻烦的多,另外 timestamp 字段是由系统维护,插入或更新后此字段会自动更新成最新的时间戳。

    删除时不能物理删除需要在表中增加如 IsDelete 字段标实记录被删除了。


    知识改变命运,奋斗成就人生!
    2011年3月2日 9:24
    版主
  • sql 后续版本不推荐使用timestamp了,建议使用rowversion来做版本控制。

    timestamp列不需要制定列名的,一般最后一列作为时间戳字段。

    这个查询是因为你没这个字段,所以出错。

     


    family as water
    2011年3月2日 11:36

全部回复

  • 你好!

    1 既然是主键就不要去修改,否则可能会引起数据异常

    2 一般会在服务端将 timestamp 转换成 int 后再进行相应的比较。 如:select ... CAST(ColTimestamp as int) from tableName 

    当然客户端(DataSet 中)也可以将 byte[] 转换为 int 但这显然要麻烦的多,另外 timestamp 字段是由系统维护,插入或更新后此字段会自动更新成最新的时间戳。

    删除时不能物理删除需要在表中增加如 IsDelete 字段标实记录被删除了。


    知识改变命运,奋斗成就人生!
    2011年3月2日 9:24
    版主
  • 谢谢您。现在的问题是我们开发的数据库要拿给客户使用,我不能保证他们不去修改主键内容,只有做好差错处理。

    像请教下您,我如何制定那一列该作为timestamp列?因为我看MSDN上写每个表只有一列有timestamp属性。  还有您给的那个select的实例,我在数据库中运行时会有语法错误。

    'ColTimestamp' 附近有语法错误。
    select 概述 CAST(ColTimestamp as int) from 数据表

     


    aaron
    2011年3月2日 9:52
  • sql 后续版本不推荐使用timestamp了,建议使用rowversion来做版本控制。

    timestamp列不需要制定列名的,一般最后一列作为时间戳字段。

    这个查询是因为你没这个字段,所以出错。

     


    family as water
    2011年3月2日 11:36
  • select ... CAST([时间戳列名] as int) from tableName
    知识改变命运,奋斗成就人生!
    2011年3月2日 15:32
    版主
  • 谢谢上面两位,是我一直忘记在数据库中添加timestamp这一列了。


    aaron
    2011年3月3日 2:55