Pendant la recherche dans ma base de données, j'exécute une instruction INSERT si un élément particulier n'existe pas et une autre instruction INSERT si je trouve un ou plusieurs de ces éléments.
Je ne sais pas trop comment utiliser les expressions IF ELSE.
Ce que j’ai jusqu’à présent est une déclaration qui comptera le nombre de fois où les données cibles apparaissent; il affichera VRAI s'il est supérieur à 0, sinon, il affichera FAUX. Je ne trouve aucun exemple pour m'aider à comprendre comment l'utiliser pour exécuter deux instructions INSERT différentes.
Voici ce que j'ai jusqu'à présent:
SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
)
En fonction de vos besoins, voici deux manières:
IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE')
--INSERT SOMETHING
ELSE
--INSERT SOMETHING ELSE
Ou un peu plus longtemps
DECLARE @retVal int
SELECT @retVal = COUNT(*)
FROM TABLE
WHERE COLUMN = 'Some Value'
IF (@retVal > 0)
BEGIN
--INSERT SOMETHING
END
ELSE
BEGIN
--INSERT SOMETHING ELSE
END
Tant que vous avez besoin de le trouver basé sur Comptez un peu plus que 0, il est préférable d'utiliser EXISTS comme ceci:
IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data')
BEGIN
-- TRUE Procedure
END
ELSE BEGIN
-- FALSE Procedure
END
IF exists
IF exists (select * from table_1 where col1 = 'value')
BEGIN
-- one or more
insert into table_1 (col1) values ('valueB')
END
ELSE
-- zero
insert into table_1 (col1) values ('value')
Pas très clair ce que vous entendez par
"I cant find any examples to help me understand how I can use this to run 2 different statements:"
. Utilisez-vous CASE
comme une SWITCH
que vous recherchez?
select case when totalCount >= 0 and totalCount < 11 then '0-10'
when tatalCount > 10 and totalCount < 101 then '10-100'
else '>100' end as newColumn
from (
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) A
Il y a beaucoup, beaucoup de façons de coder cela, mais voici une façon possible. Je suppose que MS SQL
Nous commencerons par obtenir le nombre de lignes (Another Quick Exemple ), puis nous ferons if/else
-- Let's get our row count and assign it to a var that will be used
-- in our if stmt
DECLARE @HasExistingRows int -- I'm assuming it can fit into an int
SELECT @HasExistingRows = Count(*)
ELSE 0 -- false
FROM
INCIDENTS
WHERE {Your Criteria}
GROUP BY {Required Grouping}
Maintenant, nous pouvons faire le If/Else Logic MSDN Docs
-- IF / Else / Begin / END Syntax
IF @HasExistingRows = 0 -- No Existing Rows
BEGIN
{Insert Logic for No Existing Rows}
END
ELSE -- existing rows are found
BEGIN
{Insert logic for existing rows}
END
Un autre moyen plus rapide (inspiré par le commentaire de Mahmoud Gamal):
Oubliez toute la création/affectation de variable - recherchez "EXISTS" - MSDN Docs 2 .
IF EXISTS ({SELECT Query})
BEGIN
{INSERT Version 1}
END
ELSE
BEGIN
{INSERT version 2}
END
une solution évidente consiste à exécuter 2 requêtes distinctes, sélectionnez d’abord tous les éléments dont le nombre est égal à 1 et exécutez votre insertion, puis sélectionnez les éléments dont le nombre est supérieur à 1 et exécutez la deuxième insertion.
dans un deuxième temps, si les deux insertions sont similaires, vous pouvez probablement les combiner en une requête.
une autre possibilité consiste à utiliser un curseur pour parcourir votre jeu d'enregistrements et à effectuer la logique dont vous avez besoin pour chaque ligne.
Utilisez simplement les éléments suivants:
IF ((nombre de sélections (*) de la table) = 0)
....
FIN
Si c'est dans SQL Server, votre syntaxe est correcte; Cependant, vous devez référencer le compte (*) en tant que nombre total à partir de votre requête imbriquée. Cela devrait vous donner ce dont vous avez besoin:
SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
En utilisant cela, vous pouvez affecter TotalCount à une variable, puis utiliser une instruction IF ELSE pour exécuter vos instructions INSERT:
DECLARE @TotalCount int
SELECT @TotalCount = TotalCount FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
IF @TotalCount > 0
-- INSERT STATEMENT 1 GOES HERE
ELSE
-- INSERT STATEMENT 2 GOES HERE