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. p>
3 Réponses :
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
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
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
Quel produit DBMS utilisez-vous? Il n'y a pas de
si code> 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 code>, pas
commencer () fin code>.