代码之家  ›  专栏  ›  技术社区  ›  serdar

SQL SCOPE_IDENTITY记录两次

  •  0
  • serdar  · 技术社区  · 12 年前

    我有一个存储过程作为

     @user1 uniqueidentifier , 
     @user2 uniqueidentifier , 
     @mesaj_text varchar(500),
     @mesaj_read int
     AS
    
     BEGIN
     declare @chat_id int
     IF EXISTS (SELECT chat_id FROM chat where user1=@user1 and user2 =@user2 or       user1=@user2 and user2 =@user1) 
        BEGIN   SELECT @chat_id =chat_id FROM chat where user1=@user1 and user2 =@user2 or user1=@user2 and user2 =@user1
        INSERT INTO mesaj values (@chat_id,@user1,@mesaj_text,getdate(),@mesaj_read) END
    ELSE insert into chat values (@user1,@user2)
        SET @chat_id=SCOPE_IDENTITY()
        insert into mesaj values (@chat_id,@user1,@mesaj_text,getdate(),@mesaj_read)
    

    一切都好。

    但录制了两次“mesaj”。获取第一个插入的“mesaj”id,并将其用作第二条记录的chat_id。 所以录制了两次。(mesaj在土耳其语中的意思是消息:)。我试图使用@@IDENTITY而不是SCOPE_IDENTITY,但没有任何变化。我尝试使用IDENT_CURRENT(聊天),但返回错误“无效的列名'chat'。”

    我该如何解决这个问题?

    1 回复  |  直到 12 年前
        1
  •  4
  •   Khan    12 年前

    你需要把所有东西都包起来 ELSE 在一个 BEGIN END 将其作为条件 IF .

    @user1 uniqueidentifier , 
    @user2 uniqueidentifier , 
    @mesaj_text varchar(500),
    @mesaj_read int
    AS
    
    BEGIN
        declare @chat_id int
        IF EXISTS (SELECT chat_id FROM chat where user1=@user1 and user2 =@user2 or user1=@user2 and user2 =@user1) 
        BEGIN   
            SELECT @chat_id =chat_id FROM chat where user1=@user1 and user2 =@user2 or user1=@user2 and user2 =@user1
            INSERT INTO mesaj values (@chat_id,@user1,@mesaj_text,getdate(),@mesaj_read) 
        END
        ELSE 
        BEGIN       
            insert into chat values (@user1,@user2)    
            SET @chat_id=SCOPE_IDENTITY()
            insert into mesaj values (@chat_id,@user1,@mesaj_text,getdate(),@mesaj_read)
        END
    END
    
    推荐文章