【发布时间】:2020-09-03 07:52:47
【问题描述】:
我有一个这样的 SQL Server 表:
CREATE TABLE [dbo].[Person]
(
[ID] [uniqueidentifier] NOT NULL,
[name] [uniqueidentifier] NOT NULL,
[address] [nvarchar](50) NULL,
[value] [nvarchar](max) NULL
[date] [datetime] NOT NULL,
CONSTRAINT [PK_Person]
PRIMARY KEY CLUSTERED ([ID] ASC)
)
它有如下数据:
ID name address value date
-----------------------------------------------------
1 a 1 10 2020-08-27 06:06:29.833
2 b 2 30 2020-08-28 06:06:29.833
3 c 3 5 2020-08-27 06:06:29.833
4 d 4 30 2020-08-28 06:06:29.833
我正在对该表进行批量插入。插入时,如果数据为(名称、地址、值)重复,我不想插入。我想静默插入数据。
所以如果要插入的输入数据是:
ID name address value date
-----------------------------------------------------
5 e 5 10 2020-08-27 06:06:29.833
6 b 2 30 2020-08-29 06:06:29.833
7 c 3 5 2020-08-30 06:06:29.833
8 f 4 30 2020-08-28 06:06:29.833
那么只有 ID 为 5 和 8 的行被插入,ID 为 6 和 7 的行被认为是重复的,不应作为新的插入,并且在最终表中(名称、地址、值)始终是唯一的。
我的坏。输入数据不是来自表。 它是python中的一个列表。
list = [['e', 5, 10], ['b', 2,30], ['c', 3, 5], ['f', 4,30]]
目前我的查询是:
insert_query = "INSERT INTO Person(ID,name,address,value,date) VALUES ( newID(),%s, %s, %s,getDate());"
cursor.executemany(insert_query, list)
我想要类似的东西:
insert_query = "INSERT INTO Person(ID,name,address,value,date) VALUES ( newID(),%s, %s, %s,getDate()) on duplicate(name,address,value) ignore that insert;"
cursor.executemany(insert_query, list)
【问题讨论】:
-
请告诉我们您的
insert代码。 -
你试过了吗?检查任何其他 SO 问题,搜索答案?这是一个非常常见的问题,可以通过自联接或 EXISTS 子句轻松解决。本周我注意到至少一个类似的问题
-
" 在最终表(名称、地址、值)中始终是唯一的。"那么我要做的第一件事就是在这些列上创建一个唯一约束(或索引),甚至在我处理插入之前。
-
但这会引发错误。我想静默插入其他数据不重复的新行
标签: sql sql-server subquery sql-insert bulkinsert