SQL Server:插入条件

Posted

技术标签:

【中文标题】SQL Server:插入条件【英文标题】:SQL Server : INSERT with a condition 【发布时间】:2016-11-16 02:55:35 【问题描述】:

只有当我尝试传递的值不存在时,我才想插入到我的Files-Favorites 表中。

我试过了:

INSERT INTO [Files-Favorites](fileID,auditorID)  
     VALUES ('1', '34') 
      WHERE (fileID != '1' 
        AND auditorID != '34')

这不起作用。我试图不 INSERT 重复值。我该如何解决这个问题?这是针对 Microsoft SQL Server 2005 的。

谢谢

【问题讨论】:

【参考方案1】:

如果不存在则尝试使用

IF NOT EXISTS(SELECT * FROM [Files-Favorites] WHERE fileID = '1' AND auditorID = '34') 
BEGIN 
    INSERT INTO [Files-Favorites](fileID, auditorID) 
    VALUES('1', '34') 
END

【讨论】:

【参考方案2】:

我会使用复合(多列)键,而不是检查每个插入

ALTER TABLE [Files-Favorites] ADD CONSTRAINT unique_1 UNIQUE(fileID,auditorID)

【讨论】:

这超出了我的理解范围,不确定您的意思 您可以添加唯一约束以防止重复数据。检查每个插入不是一个好习惯。【参考方案3】:

我们可以使用 EXISTS 和子查询来检查数据是否存在并相应地插入:

INSERT INTO [Files-Favorites](fileID,auditorID) 
SELECT fileID, auditorID FROM (
SELECT '1' fileID,'34' auditorID) t
WHERE NOT EXISTS(SELECT tm.fileID FROM [Files-Favorites] tm 
                 WHERE tm.fileID = t.fileID AND tm.auditorID = t.auditorID)

【讨论】:

以上是关于SQL Server:插入条件的主要内容,如果未能解决你的问题,请参考以下文章

如果存在并满足多个条件,如何更新行,否则如何在 SQL Server 中插入

使用 SQL Server DTS 包有条件地在目标表中插入/更新行

SQL Server:使用case插入两个表

sql server 判断记录存在更新不存在插入

插入到从选择性能 SQL Server

sql server 中有一张表,我想把表中两列的数据合并后插入本表中另一列!请问怎么实现