web-dev-qa-db-fra.com

Utilisation de l'instruction IF pour vérifier si la table temporaire contient des lignes dans une procédure stockée

Comment puis-je utiliser une instruction IF dans ma procédure stockée pour vérifier si ma table temporaire a des lignes?

Je veux vérifier si #TempDataTable a des lignes, alors je ferais l'une des deux instructions, insérer ou mettre à jour en fonction de la sortie.

J'ai fait ce qui suit:

BEGIN
    SELECT * 
    INTO #TempDataTable 
    FROM
        (SELECT * 
         FROM BranchNameTable BT 
         LEFT JOIN BranchLocationActivate BLA ON BT.loc_id = BLA.loc_id 
         WHERE BT.Branchloc = 1;) as Q

    if(//TempDataTable has 0 rows)

       INSERT INTO BranchLocationActivate 
       VALUES(//my values)

    ELSE

       UPDATE BranchLocationActivate 
       SET //My values where //my values
END

Comment puis-je le mettre après ma déclaration de sélection dans ma procédure ??

17
marchemike

Vous pouvez utiliser not exists:

if (not exists (select 1 from #tempdataatable))
32
Gordon Linoff

En supposant qu'il n'y a pas d'instructions SQL entre SELECT * INTO #TempDataTable Et if(//TempDataTable has 0 rows), vous n'avez même pas besoin de la table temporaire en premier lieu. Au lieu de cela, vous devez simplifier le test pour être juste:

IF (NOT EXISTS(
                SELECT *
                FROM BranchNameTable BT
                LEFT JOIN BranchLocationActivate BLA
                       ON BT.loc_id = BLA.loc_id
                WHERE BT.Branchloc = 1
              )
   )
BEGIN
   INSERT INTO BranchLocationActivate VALUES(//my values)
END;
ELSE
BEGIN
   UPDATE BranchLocationActivate SET //My values where //my values
END;

S'il existe des instructions entre ces parties qui utilisent la table temporaire, vous pouvez simplifier en utilisant les informations que SQL Server vous donne déjà après l'instruction DML via la variable @@ROWCOUNT:

DECLARE @RowsInserted INT;

SELECT *
INTO #TempDataTable
FROM BranchNameTable BT
LEFT JOIN BranchLocationActivate BLA
       ON BT.loc_id = BLA.loc_id
WHERE BT.Branchloc = 1;

SET @RowsInserted = @@ROWCOUNT;

-- other statements

IF (@RowsInserted = 0)
BEGIN
   INSERT INTO BranchLocationActivate VALUES(//my values)
END;
ELSE
BEGIN
   UPDATE BranchLocationActivate SET //My values where //my values
END;
3
Solomon Rutzky

Vous pouvez soit poursuivre avec la solution mentionnée par Gordon Linoff ci-dessus, ou si le nombre de lignes peut aider/une manière plus simple serait la suivante;

DECLARE @Count AS INT
Select @Count = count (*) from #tempdataatable

If @Count = 0 
BEGIN
    ...
ELSE
    ...
END
1
Nadeem_MK