none
关于数据库两条一样的数据 RRS feed

  • 问题

  • 先说明下我的表结构:
    AccountKey uniqueidentifer Primary key,
    AccountID   VARCHAR(50)
    Regdate      DATETIME


    这是一张用户的注册表。
    但发现有奇怪的现象。
    注册页面调用sp往表插入数据。而且做逻辑判断。
    IF Not EXISTS (SELECT 1 FROM Table WHERE AccountID=@AccountID)
    BEGIn
        INSERT INTO  TABLE (AccountKey,AccountID,Regdate)  VALUES(NEWID(),@AccountID,GETDATE())
    END


    但这样还出现两条除了主键AccountKey之外,其他都一样的数据。注册时间也一模一样。

    用的数据库是sqlserver 2005
    我想知道是否数据库里存在什么机制。导致了Insert的时候有两条数据。(从存储过程逻辑来判断,这个不是调用两次存储过程的症状)

    跪求答案。

    • 已编辑 Lich_gbc 2010年2月23日 8:58
    2010年2月23日 8:29

答案

全部回复

  • 我想补充说明的是:
    刚统计了日平均注册大概在3000条左右。

    库里也有其他读写数据更大的表。
    2010年2月23日 8:32
  • 逻辑错误,应该是如果不存在才添加。

    IF NOT EXISTS (SELECT 1 FROM Table WHERE AccountID=@AccountID)
    BEGIN
        INSERT INTO  TABLE (AccountKey,AccountID,Regdate)  VALUES(NEWID(),@AccountID,GETDATE())
    END

    如果要求 AccountID 唯一,可以在表中设置 AccountID 列为唯一约束。

    知识改变命运,奋斗成就人生!
    2010年2月23日 8:55
    版主
  • 不好意思。。打错了哈。我用的是 Not Exists

    还是谢谢版主的回答。
    2010年2月23日 8:58
  • 那设置唯一约束是能解决这个问题的。

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Lich_gbc 2010年2月24日 3:15
    2010年2月23日 9:02
    版主
  • 表结构目前是没法改变了啊。 你说的唯一约束是主键吗?
    2010年2月23日 9:04
  • 不是,是索引。你打开表的设计视图,点击“索引\键”,添加一个索引,列选择为 AccountId ,是否唯一选是。
    知识改变命运,奋斗成就人生!
    2010年2月23日 9:09
    版主
  • 恩。。。我明白了。谢谢你哈。

    但这是什么原因造成的呢?你有碰到过类似的事情吗。

    2010年2月23日 9:24
  • 照常理说,你每日的交互量并不大。如果这个问题出现的次数较多, 我觉得可能是其它原因所致。
    知识改变命运,奋斗成就人生!
    2010年2月23日 9:27
    版主