如何使用 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
我正在尝试将数据插入 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