Как исправить неверный синтаксис SQL с IF EXISTS - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь вставить данные в таблицу. Если запись уже существует, я хочу заменить 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 

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Я так понимаю, вы используете sql-server. SQL Server не имеет 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 
0 голосов
/ 08 января 2019
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 голосов
/ 08 января 2019

В SQL Server 2017 я попробовал это:

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

и у меня нет ошибок. но у меня ошибка в "ЗАМЕНА НА" !!

...