我有一个名为Panels
的表,如下所示,截至目前有以下条目。
---Panel table
p_id sequence p_type
1 2 '3a'
... and many more rows
我正在使用以下查询向Panels
表中插入一个具有p_type='4a'
的新条目。为了创建新条目,我将使用p_type='3a'
。我的问题是,在执行INSERT INTO之前,如何检查表中是否已经存在p_type='4a'的条目。
试图在网上找到一个解决方案,我发现了一个模板代码,如下所示。
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语句集成在一起。有人能帮我吗?
我认为您可以按如下方式使用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)
不要提前检查,而是让数据库为您实现UNIQUE约束。否则,总是有机会由另一个线程在检查和插入之间插入行。
例如:
alter table panels add constraint uq1 (id, p_type);
然后,如果一个INSERT
失败,则该组合已经存在。