在以下存储过程中选择“1”是什么

时间:2010-09-30 13:35:49

标签: sql-server-2005

BEGIN    
 IF EXISTS(SELECT  * FROM Table1 WHERE ID=@ID)      
  BEGIN     
    UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
    SELECT '1'   
  END    
 ELSE     
  SELECT '0'    
END  

这是行号吗?桌子还是什么? 还有“IF EXISTS”正在检查什么?表格或是否存在ID?

4 个答案:

答案 0 :(得分:4)

看起来无论谁写过存储过程都将其用作返回值来表示成功或失败。

以这种方式执行操作将导致单行,每次调用该过程都会返回一列。

处理这个问题的正确方法是实际使用存储过程的返回值,而不是返回单列单行:

BEGIN
    IF EXISTS(SELECT * FORM Table1 WHERE ID = @ID)
    BEGIN
        UPDATE Table1 SET Name = @Name WHERE ID = @ID
        RETURN 1
    END

    RETURN 0
END

答案 1 :(得分:3)

IF EXISTS正在检查Table1中是否存在具有给定ID的行。如果有一行,它将使用给定名称更新该行。选择“1”将返回“1”,选择“0”将返回“0”。 “1”或“0”表示是否找到了行。

答案 2 :(得分:0)

据推测,某些调用代码会检查此值以确定某行是否已更新。

您可以这样做,而不是检查和更新(两个表访问)。

 UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
 SELECT CASE WHEN @@Rowcount = 0 THEN 0 ELSE 1 END

如果id是PK,那么你可以做

 UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
 SELECT  @@Rowcount 

请注意,只要SET NOCOUNT未启用,那么受影响的行数无论如何都将传递回客户端应用程序。

答案 3 :(得分:0)

选择“1”用于表示Table1包含已更新的id值@ID(参数)。选择“0”表示Table1不包含id值@ID。