SQL Server 具有多个条件的SQL INSERT INTO WHERE NOT EXISTS

wqsoz72f  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(207)

我有一个SQL Server数据库。我希望将一些值插入到多个表中,其中的数据还不存在。
示例:
表一
| 识别号|姓名|材料|其他|
| - ------| - ------| - ------| - ------|
| 1个|铝|二〇一四年|第1版|
| 第二章|镁|二〇一三年|第2版|
我想开发一个存储过程,使它能够向表中插入以下信息:

Aluminum | 2013

我当前的存储过程不允许我这样做,因为它识别Magnesium | 2013并拒绝2013,因为它正在复制。
此外,我们如何比较多个列值,例如:

INSERT WHERE NOT EXISTS (Material = 2014 AND Other = v3)

当前存储过程:

IF EXISTS(SELECT * 
          FROM dbo.[01_matcard24]
          WHERE NOT EXISTS (SELECT [01_matcard24].Element 
                            FROM dbo.[01_matcard24] 
                            WHERE dbo.[01_matcard24].Element = @new_element)
            AND NOT EXISTS (SELECT [01_matcard24].Material 
                            FROM dbo.[01_matcard24] 
                            WHERE dbo.[01_matcard24].Material = @new_material)
)

INSERT INTO dbo.[15_matcard24_basis-UNUSED] (Element, Material)
VALUES (@new_element, @new_material)
r3i60tvu

r3i60tvu1#

1.与其使用IF语句,不如将其作为INSERT的一部分保留为基于集合
1.创建EXISTS子查询以检测唯一行,而不是单个列

INSERT INTO dbo.[15_matcard24_basis-UNUSED] (Element, Material)
SELECT @new_element, @new_material
WHERE NOT EXISTS (
    SELECT 1
    FROM dbo.[15_matcard24_basis-UNUSED]
    WHERE Element = @new_element AND Material = @new_material
    -- AND Other = @Other
);

相关问题