我在这里遇到这种情况,这段代码实际上来自一所古老的大学,他不再和我在一起,而且我对存储过程代码不是很熟悉。
SELECT @postcode = max(postcode)
FROM user
WHERE uState = @ustate
SELECT @postcode 'POSTCODE'
IF @@rowcount = 0
BEGIN
SELECT @p_status = 8
ROLLBACK TRAN
PRINT 'Unable to obtain new user #. Copy aborted'
RETURN
END
UPDATE address
SET postcode = @postcode
WHERE userID = @userID
运行存储过程时,即使其中有一个值,它也始终返回rowcount = 0。
通过运行下面的查询,我知道有一个值。
SELECT MAX(postcode)
FROM user
WHERE uState = @ustate
请帮助
答案 0 :(得分:0)
您的同事离开也许是一件好事,因为您显示给我们的代码似乎有异味。特别是,我不知道这条线应该做什么:
select @postcode 'POSTCODE'
如果您要分配 'POSTCODE'
到@postcode
,则可以使用以下方法:
select @postcode = 'POSTCODE'
但是,第一个选择显然是在进行可能的分配,因此我将完全删除此行:
SELECT @postcode = max(postcode)
FROM user
WHERE uState = @ustate
IF @@rowcount = 0
BEGIN
SELECT @p_status = 8
ROLLBACK TRAN
PRINT 'Unable to obtain new user #. Copy aborted'
RETURN
END
@@rowcount
应该与select语句一起使用,除了DML操作之外,因此,如果第一个查询返回一个值,那么@@rowcount
不应为零。
答案 1 :(得分:0)
select @postcode始终将@@ rowcount返回为1.您可以将行计数值保留在变量中。
我认为您的查询应该是这样。
DECLARE @RC INT
SELECT @postcode = max(postcode)
FROM user
WHERE uState = @ustate
SET @RC = @@ROWCOUNT
select @postcode 'POSTCODE'
IF @RC = 0
BEGIN
SELECT @p_status = 8
ROLLBACK TRAN
PRINT 'Unable to obtain new user #. Copy aborted'
RETURN
END
UPDATE address
SET postcode = @postcode
WHERE userID = @userID
答案 2 :(得分:0)
只需注释此代码行“ select @postcode'POSTCODE'”
它对执行SP有意义吗?
-- select @postcode 'POSTCODE'