SQL Server @@ rowcount始终返回0

时间:2018-10-11 05:15:45

标签: sql sql-server sql-server-2008 stored-procedures

我在这里遇到这种情况,这段代码实际上来自一所古老的大学,他不再和我在一起,而且我对存储过程代码不是很熟悉。

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 

请帮助

3 个答案:

答案 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'