我正在尝试使用SQL中的以下查询更新200k记录:
UPDATE [ExampleDb].[dbo].[Contacts]
SET Type_ID = 2
WHERE [Company] = 0 AND (Type_ID != 2 OR Type_ID IS NULL);
当查询在25秒内完成时,我收到以下消息:
(195304 row(s) affected)
(0 row(s) affected)
(0 row(s) affected)
(0 row(s) affected)
(0 row(s) affected)
(0 row(s) affected)
此后不会更新任何记录。然后我将查询限制为更新几条或一条记录,例如:
UPDATE [ExampleDb].[dbo].[Contacts]
SET Type_ID = 2
WHERE Email_Address LIKE '%amazon.com%'
AND [Company] = 0 AND (Type_ID != 2 OR Type_ID IS NULL);
运行时,会正确更新60条记录。
我不确定如何开始解决此问题。 SQL仅限于简单UPDATE
上的x条记录吗?我该如何解决这个问题?我应该编写一个循环来一次更新10%的记录或者这些行吗?
答案 0 :(得分:1)
ALTER TABLE [ExampleDb].[dbo].[Contacts] DISABLE TRIGGER trigger_Name
UPDATE [ExampleDb].[dbo].[Contacts]
SET Type_ID = 2
WHERE [Company] = 0 AND (Type_ID != 2 OR Type_ID IS NULL);
ALTER TABLE [ExampleDb].[dbo].[Contacts] ENABLE TRIGGER
trigger_Name
关于不起作用的事情的附注:我试图在BEGIN TRANSACTION
和COMMIT
中包装代码以在任何触发器启动之前提交事务,如下所示:
BEGIN TRANSACTION
UPDATE [ExampleDb].[dbo].[Contacts]
SET Type_ID = 2
WHERE [Company] = 0 AND (Type_ID != 2 OR Type_ID IS NULL);
COMMIT;
这不起作用。