2010-05-31 10 views
1

Dans SQL Server, il est possible de tester le résultat d'une procédure stockée pour savoir si le résultat renvoie des lignes ou rien?SQL Server - Test du résultat d'une procédure stockée

Exemple:

EXEC _sp_MySp 1, 2, 3 

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

Mais @@ ROWCOUNT retourne toujours 0 est donc peut-être il une autre façon de le faire?

Répondre

2

Il faudrait insérer les résultats dans une table ou variable tableau:

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' 

Si vous pouvez modifier la procédure stockée, vous pouvez alors le retourner @@ROWCOUNT comme son code de retour ou comme param de sortie :

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

Si je ne me trompe pas, les instructions EXECUTE conservent le @@ ROWCOUNT précédent. Par conséquent, votre instruction retournera toujours 0. Essayez de remplacer "EXEC _sp_MySp 1, 2, 3" par les instructions réelles de votre SP.

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

IF @@ROWCOUNT = 0 
    BEGIN 
     ... 
    END 
ELSE 
    BEGIN 
     ... 
    END 
Questions connexes