如何使用 IF EXISTS 修复 SQL 不正确的语法

How to fix SQL incorrect syntax with IF EXISTS

我正在尝试将数据插入 table。如果记录已经存在,我想替换 Base64 并保留现有标识符。如果该记录尚不存在,则按正常方式插入。

目前的代码检查记录是否存在并替换或插入。我收到语法错误,我不完全确定我做错了什么。

IF EXISTS (
     SELECT Bdt_DocumentDataAsBase64.Identifier
     FROM Bdt_DocumentDataAsBase64
     WHERE Bdt_DocumentDataAsBase64.Identifier = @Identifier
     )

BEGIN 
(
    REPLACE INTO Bdt_DocumentDataAsBase64(Identifier,Base64)
    VALUES (@Identifier, @Base64 )
)
 END 

ELSE

BEGIN 
(
    INSERT INTO Bdt_DocumentDataAsBase64(Identifier,Base64)
    VALUES (@Identifier, @Base64)
)
END 

在 sql 服务器 2017 中,我尝试了这个:

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

而且我没有错误。 但我在 "REPLACE INTO" !!

中有错误

我了解到您使用 sql-server。 SQL 服务器没有 REPLACE INTO。您可以使用 UPDATE 语句代替它:

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