2009-11-04 2 views
2

Je l'ai fait avant, mais ne trouve pas où:/Vérifiez si la requête de sélection a des résultats à l'intérieur procédure SQL Server stocké

Je veux créer une variable dans une procédure stockée et retourner sa valeur qui sera réglée selon que d'autres sélections renvoient ou non des résultats.

fondamentalement quelque chose comme ceci:

@myVar int = 0 

BEGIN 
IF 
    SELECT SomeThing FROM SomeTable 
    @myVar = 1 
ELSE IF 
    SELECT SomeOther From SomeOtherTAble 
    @myVar = 2 
ELSE 
    @myVar = 0 
    SELECT @myVar 
END 

essayé et pas dé ... et je ne peux pas pour la vie de me rappeler où je l'ai fait dans le passé.

+1

Chaque fois que vous voulez faire plus d'une chose dans un IF ou IF/ELSE dans SQL Server, vous besoin d'envelopper les instructions dans un bloc BEGIN/END –

Répondre

0

Vous cherchez cette

@myVar int = 0 

    Declare @var int; 
    set @var = 1 
    BEGIN 
    IF 
    BEGIN 
     SELECT SomeThing FROM SomeTable 
     @myVar = 1 
    ELSE IF 
     SELECT SomeOther From SomeOtherTAble 
     @myVar = 2 
    ELSE 
     @myVar = 0 
     SELECT @myVar 
    END 
    Return @var 
    END 
3

Voir si cela fonctionne pour vous

Declare @myVar int 
set @myVar = 0 

SELECT * FROM dbo.Table1 
if @@RowCount <> 0 SET @myVar = 1 

If @myVar = 0 
begin 
    SELECT * FROM dbo.Table2 
    if @@RowCount <> 0 SET @myVar = 2 
end 

If @myVar = 0 
begin 
    SELECT * FROM dbo.Table3 
    if @@RowCount <> 0 SET @myVar = 3 
end 
0

Sonne comme paramètres de sortie pour moi ...?

CREATE PROCEDURE dbo.MyProc 
    @MyVar int output 
AS 
BEGIN 

/* 
Your code goes here. Do whatever you like, and set @MyVar as desired. 
*/ 
RETURN 

Appelez comme si:

DECLARE @MyVar int 

EXECUTE dbo.MyProc @MyVar output 

Vous pouvez définir @MyVar avant de passer dans, comme toute autre variable (il est initialisé comme nul). Si vous n'avez pas la clause "output" à la fois sur l'appel et sur l'instruction de paramètre, la valeur ne sera pas renvoyée. Les livres en ligne auront plus de détails et de détails.

(Vous pouvez également utiliser une valeur de retour, mais en général cela devrait être réservé à la gestion des erreurs.)

Questions connexes