SQL Server @@ rowcount всегда возвращает 0 - PullRequest
0 голосов
/ 11 октября 2018

У меня есть такая ситуация, этот код на самом деле из старого колледжа, и он больше не со мной, и я не очень знаком с кодом хранимой процедуры.

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 голосов
/ 11 октября 2018

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
0 голосов
/ 11 октября 2018

Просто прокомментируйте эту строку кода "select @postcode 'POSTCODE'"

Имеет ли это значение для выполнения SP?

-- select @postcode 'POSTCODE' 
0 голосов
/ 11 октября 2018

Может быть, хорошо, что ваш коллега ушел, потому что код, который вы нам показали, кажется, пахнет.В частности, я не знаю, что должна делать эта строка:

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 должен работать с операторами выбора, вдополнение к операциям DML, поэтому, если этот первый запрос возвращает значение, @@rowcount не должно быть равным нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...