0
votes

Comment réparer la syntaxe incorrecte SQL avec s'il existe

J'essaie d'insérer des données dans une table. Si l'enregistrement existe déjà, je souhaite remplacer la base64 et conserver l'identifiant existant. Si l'enregistrement n'existe pas déjà, insérez-vous comme normal.

Le code pour le moment vérifie si l'enregistrement existe et remplace ou insère. Je reçois une erreur de syntaxe et je ne suis pas tout à fait sûr de ce que je fais mal. xxx


5 commentaires

Quel produit DBMS utilisez-vous? Il n'y a pas de si dans SQL standard.


Veuillez étiqueter la question avec les SGBD que vous utilisez. SQL est une balise générique qui peut correspondre à divers SGBDM.


J'ai utilisé s'il existe avant et quand je l'exécute indépendamment du reste du script, cela fonctionne bien


Pas sûr que le studio de gestion SQL Server normal


SQL Server utilise des mots-clés pour désigner la structure de bloc dans le flux de contrôle. Pas de crochets, et certainement pas tous les deux. C'est Begin fin , pas commencer () fin .


3 Réponses :


0
votes

dans SQL Server 2017 J'ai essayé ceci:

if exists( select * from [dbo].[BIS_Branch] where id = '2fe7339f-9d3d-4e31-971d-00161d975a56')
begin
    print('edit')
end
else
begin
    print('ok')
end


0 commentaires

1
votes

Je comprends que vous utilisez SQL-Server code>. SQL Server n'a pas remplacer dans code>. Au lieu de cela, vous pouvez utiliser l'état de mise à jour:

IF EXISTS 
(
     SELECT Bdt_DocumentDataAsBase64.Identifier
     FROM Bdt_DocumentDataAsBase64
     WHERE Bdt_DocumentDataAsBase64.Identifier = @Identifier
)    
BEGIN     
    UPDATE Bdt_DocumentDataAsBase64 SET Base64=@Base64
    WHERE Identifier = @Identifier    
END     
ELSE 
BEGIN 
    INSERT INTO Bdt_DocumentDataAsBase64(Identifier,Base64)
    VALUES (@Identifier, @Base64)
END 


0 commentaires

1
votes
Declare @cnt int
set @cnt=(case when exists (select top 1 * from Bdt_DocumentDataAsBase64
     WHERE Bdt_DocumentDataAsBase64.Identifier = @Identifier )then 1 else 0 end)

if @cnt=1
 begin
 update Bdt_DocumentDataAsBase64 set Base64=@Base64 where Identifier = @Identifier
 end

else
 begin 
  INSERT INTO Bdt_DocumentDataAsBase64(Identifier,Base64)
    VALUES (@Identifier, @Base64)

 end 

0 commentaires