在一个商业游戏服务器端里有下面这样一个存储过程,
CREATE PROCEDURE LOAD_USER_DATA
@id char(21)
ASDECLARE @nRet smallint
SET @nRet = 0SELECT @nRet = COUNT(strUserId) FROM USERDATA WHERE strUserId = @id
IF @nRet = 0
RETURN 0
SELECT Nation, Race, Class, HairColor, Rank, Title, [Level], [Exp], Loyalty, Face, City FROM USERDATA WHERE strUserId = @idRETURN 1红色部分可不可以去掉呢?改成下面这样??CREATE PROCEDURE LOAD_USER_DATA
@id char(21)
ASSELECT Nation, Race, Class, HairColor, Rank, Title, [Level], [Exp], Loyalty, Face, City FROM USERDATA WHERE strUserId = @idif @@ROWCOUNT=0
  RETURN 0
ELSE
  RETURN 1

解决方案 »

  1.   


    SELECT @nRet = COUNT(strUserId) FROM USERDATA WHERE strUserId = @id 
    IF @nRet = 0 
    RETURN 0 -------------可以写成:
    IF NOT EXISTS (SELECT 1 FROM USERDATA WHERE strUserId = @id )
       return 0
      

  2.   

    如果按我那样的改的,两句SELECT变成一句,是不是会省点资源? 但是商业的游戏那样写应该也有他的道理吧?
      

  3.   


    IF NOT EXISTS (SELECT 1 FROM USERDATA WHERE strUserId = @id )
       return 0
      

  4.   

    you should not use procedure,your server will do at least one select sql.
    direct use select sql to fetch rows,and the client does the job.
      

  5.   

    你那句是干嘛的没看明白.不过之前的
    SET @nRet = 0 
    这句到是多余的.