如何在插入sql表之前检查条目是否存在



我有一个名为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失败,则该组合已经存在。

相关内容

  • 没有找到相关文章

最新更新