J'aimerais combiner une requête d'insertion avec un "où pas n'existe pas" afin de ne pas violer les contraintes PK. Cependant, une syntaxe telle que celle-ci me donne une erreur Incorrect syntax near the keyword 'WHERE'
-
INSERT INTO myTable(columns...)
VALUES(values...)
WHERE NOT EXISTS
(SELECT *
FROM myTable
WHERE pk_part1 = value1,
AND pk_part2 = value2)
Comment puis-je accomplir cela?
(En général, pouvez-vous combiner une insertion avec une clause where?)
INSERT INTO myTable(columns...)
Select values...
WHERE NOT EXISTS
(SELECT *
FROM myTable
WHERE pk_part1 = value1,
AND pk_part2 = value2)
Edit: Après avoir lu le lien martins, Si vous admettez que la meilleure solution est:
BEGIN TRY
INSERT INTO myTable(columns...)
values( values...)
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH;
Le moyen le plus simple de conserver une liste de valeurs unique consiste à: a) définir les colonnes comme clé primaire ou b) créer une contrainte unique sur les colonnes. Dans l'un ou l'autre cas, une erreur se produirait lors de la tentative d'insertion/de mise à jour de valeurs déjà existantes dans la table. Lorsqu'un NOT EXISTS/etc échouerait en silence - aucune erreur, la requête s'exécutera correctement.
Cela dit, utilisez un INSERT/SELECT (n'incluez pas la partie VALUES):
INSERT INTO myTable(columns...)
SELECT [statically defined values...]
FROM ANY_TABLE
WHERE NOT EXISTS (SELECT NULL
FROM myTable
WHERE pk_part1 = value1
AND pk_part2 = value2)
Aucun des exemples n'a fonctionné pour moi ... donc je suggère cet exemple:
INSERT INTO database_name.table_name(column_name)
SELECT column_name
FROM database_name.table_name
WHERE NOT EXISTS (SELECT NULL
FROM database_name.table_name
WHERE column_name = 'Column Value')