如何在插入 sql table 之前检查条目是否存在
how to check if entry exists before inserting in sql table
我有一个名为 Panels
的 table,现在有以下条目。
---Panel table
p_id sequence p_type
1 2 '3a'
... and many more rows
我正在使用以下查询向 Panels
table 中插入一个带有 p_type='4a'
的新条目。为了创建新条目,我将使用 p_type='3a'
。我的问题是如何在执行 INSERT INTO.
之前检查 p_type='4a' 的条目是否已存在于 table 中
尝试在网上寻找解决方案,找到了如下模板代码。
if not exists (select column_1 from table_name where column_1 = value)
begin
insert statement here
end
go
我的插入逻辑如下:
INSERT INTO Panels (p_id,sequence,p_type)
SELECT p_id,sequence,'4a'
FROM Panels
WHERE p_type='3a'
我遇到的问题是我不知道如何将上面的模板代码逻辑与我的 INSERT INTO 语句集成。有人可以帮我吗?
不要提前检查,而是让数据库通过对其实施 UNIQUE 约束来为您检查。否则,另一个线程总是有可能在检查和插入之间插入该行。
例如:
alter table panels add constraint uq1 (id, p_type);
然后,如果 INSERT
失败,那么组合已经存在。
我认为你可以使用 not exists
如下:
INSERT INTO Panels (p_id,sequence,p_type)
SELECT p_id,sequence,'4a'
FROM Panels p
WHERE p_type='3a'
And not exists
(select 1 from Panels pp
WHERE pp.p_type='4a'
and p.p_id = pp.p_id
and p.sequence = pp.sequence)
我有一个名为 Panels
的 table,现在有以下条目。
---Panel table
p_id sequence p_type
1 2 '3a'
... and many more rows
我正在使用以下查询向 Panels
table 中插入一个带有 p_type='4a'
的新条目。为了创建新条目,我将使用 p_type='3a'
。我的问题是如何在执行 INSERT INTO.
尝试在网上寻找解决方案,找到了如下模板代码。
if not exists (select column_1 from table_name where column_1 = value)
begin
insert statement here
end
go
我的插入逻辑如下:
INSERT INTO Panels (p_id,sequence,p_type)
SELECT p_id,sequence,'4a'
FROM Panels
WHERE p_type='3a'
我遇到的问题是我不知道如何将上面的模板代码逻辑与我的 INSERT INTO 语句集成。有人可以帮我吗?
不要提前检查,而是让数据库通过对其实施 UNIQUE 约束来为您检查。否则,另一个线程总是有可能在检查和插入之间插入该行。
例如:
alter table panels add constraint uq1 (id, p_type);
然后,如果 INSERT
失败,那么组合已经存在。
我认为你可以使用 not exists
如下:
INSERT INTO Panels (p_id,sequence,p_type)
SELECT p_id,sequence,'4a'
FROM Panels p
WHERE p_type='3a'
And not exists
(select 1 from Panels pp
WHERE pp.p_type='4a'
and p.p_id = pp.p_id
and p.sequence = pp.sequence)