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?
答案 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。