2010-05-31 2 views
1

В SQL Server можно проверить результат хранимой процедуры, чтобы узнать, возвращают ли результат строки или ничего?SQL Server - проверить результат хранимой процедуры

Пример:

EXEC _sp_MySp 1, 2, 3 

IF @@ROWCOUNT = 0 
BEGIN 
    PRINT('Empty') 
END 
ELSE 
BEGIN 
    PRINT(@@ROWCOUNT) 
END 

Но @@ ROWCOUNT всегда возвращает 0, так что, может быть, есть другой способ сделать это?

ответ

2

Вы должны были бы вставить результаты в виде таблицы или таблиц переменные:

DECLARE @t TABLE (
    Col1 varchar(20), 
    Col2 varchar(20) 
) 


INSERT INTO @t 
EXEC _sp_MySp 1, 2, 3 

IF EXISTS (SELECT 1 FROM @t) PRINT 'Empty' 

Если вы можете изменить хранимую процедуру, то вы могли бы его вернуть @@ROWCOUNT как это код возврата или как выходные пары :

CREATE PROC _sp_MySp 
    @p1 int, 
    @p2 int, 
    @p3 int 
AS 
    SELECT * FROM Table WHERE Col1 = @p1 
    RETURN @@ROWCOUNT 

DECLARE @rc int 
EXEC @rc = _sp_MySP 1, 2, 3 
IF @rc = 0 PRINT 'Empty' 
ELSE PRINT CONVERT(varchar, @rc) 
0

Если я не ошибаюсь, операторы EXECUTE сохраняют предыдущий @@ ROWCOUNT. Поэтому ваш оператор всегда будет возвращать 0. Попробуйте заменить «EXEC _sp_MySp 1, 2, 3» на фактические утверждения вашего SP.

CREATE PROCEDURE _sp_MySp 
    @p1 int, @p2 int, @p3 int 
AS 
    SELECT ... FROM ... WHERE ... 

IF @@ROWCOUNT = 0 
    BEGIN 
     ... 
    END 
ELSE 
    BEGIN 
     ... 
    END 
Смежные вопросы