禁止将重复行插入表

时间:2017-04-26 15:41:59

标签: python sql-server

假设我有一个简单的SQL表:

CREATE TABLE TestTable (
Model CHARACTER(10),
Brand CHARACTER(10)
)

现在,假设我已将以下内容插入到之前创建的表中:

INSERT INTO TestTable (Model, Brand) VALUES ('Thunderbird', 'Ford')
INSERT INTO TestTable (Model, Brand) VALUES ('Bronco', 'Ford')

如何构造一个INSERT语句,该语句不会插入表中已包含的数据?应执行以下INSERT语句,而不会导致重复的行:

INSERT INTO TestTable (Model, Brand) VALUES ('Fairlane', 'Ford')
INSERT INTO TestTable (Model, Brand) VALUES ('Mustang', 'Ford')
INSERT INTO TestTable (Model, Brand) VALUES ('Thunderbird', 'Ford')

最终,我想通过Python的pypyodbc库编写此插入脚本。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您正在寻找执行插入的SQL查询,那么您可以使用以下内容:

INSERT INTO TestTable (Model, Brand) 
SELECT t.model, t.Brand
FROM (VALUES ('Thunderbird', 'Ford')) AS t(model, brand)
WHERE NOT EXISTS (SELECT 1
                  FROM TestTable 
                  WHERE t.model = model AND t.brand = brand)

如果存在重复项,则INSERT未执行,因为SELECT不返回任何行。

Demo here