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 ??
Vous pouvez utiliser not exists
:
if (not exists (select 1 from #tempdataatable))
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;
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