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

极度奇怪,为什么一个存储过程很多人都是正确执行,但有一台电脑就会执行2次
好像还是同时执行的。
存储过程如下,真实奇怪死了
SQL code

ALTER PROC [dbo].[addUser]
(
    @qqOpenID CHAR(32),
    @userName NVARCHAR(30),
    @qqImg VARCHAR(150),
    @rankType TINYINT,
    @sex TINYINT,
    @insertGuidKey CHAR(36),
    @wbName VARCHAR(50),
    @id INT OUT,
    @introduction NVARCHAR(500)
)
AS
    SELECT @id=ID FROM Users WHERE qqOpenID=@qqOpenID
    IF(@@ROWCOUNT>0)
    BEGIN
        UPDATE Users SET guidKey=@insertGuidKey,wbName=@wbName WHERE ID=@id
        RETURN 65;
    END
    ELSE
    BEGIN
        INSERT Users(qqOpenID,userName,qqImg,rankType,sex,guidKey,wbName,typeid,introduction) VALUES(@qqOpenID,@userName,@qqImg,@rankType,@sex,@insertGuidKey,@wbName,1,@introduction)
        Select @id=SCOPE_IDENTITY()
        RETURN 66;
    END
    



------解决方案--------------------
那可能要检查一下那台执行两次的机器,是否有什么不同。你可以试试用那台电脑来跟踪究竟它是怎么执行存储过程,就是SSMS那个执行旁边的小绿箭头。看看过程。或者用VS写个代码来调用跟踪,vs很久没用,不会写。
另外,哪怕数据只有1条,也有可能受别的事务影响而导致查不出来。