sql - 一次运行 1000 个查询的大量更新查询的最佳方法

标签 sql sql-server tsql

我有一个包含 50,000 个更新查询的 SQL Server 文件,如下所示:

UPDATE [dbo].[TABLE1] SET [COLUMN2] = 'abc123' WHERE [Id] = 100;
UPDATE [dbo].[TABLE1] SET [COLUMN2] = 'def456' WHERE [Id] = 101;
UPDATE [dbo].[TABLE1] SET [COLUMN2] = 'ghi789' WHERE [Id] = 205;
UPDATE [dbo].[TABLE1] SET [COLUMN2] = 'jkl012' WHERE [Id] = 216;
UPDATE [dbo].[TABLE1] SET [COLUMN2] = 'mno345' WHERE [Id] = 350;

我不想运行此文件并同时执行所有 50,000 个查询。 通过一次执行 1000 个查询来执行此操作的最佳方法是什么,完成后继续执行下一个 1000 个查询,直到所有查询都执行完毕? 另外,如果出现错误,我该如何回滚?

最佳答案

您应该使用这些值创建一个临时表。然后您可以将其用于更新。如果没有,您可以在查询中创建一个派生表:

with t as (
      select v.*
      from (values (100, 'abc123'),
                   (200, 'def456'),
                   . . .
           ) v(id, column2)
     )
update t1
    set column2 = t.column2
    from dbo.table1 t1 join
         t
         on t1.id = t.id;

关于sql - 一次运行 1000 个查询的大量更新查询的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217987/

相关文章:

mysql - 预订系统删除一段时间内所有保存的预订

mysql - 仅根据非唯一参数更新查询中的单行?

sql-server - 连接到 AWS EC2 上的 SQL Server Express

sql - 使用 SQL 克隆数据库中表示的树结构

tsql - 如何在 SQL Server CE 中连接两个具有不同列的表?

sql-server - 为什么T-SQL变量比较比基于GETDATE()函数的比较慢?

sql - 如何选择与 json 字段数组中的值匹配的记录?

sql - 如何使用 sqlcmd/命令行移动数据库的事务日志?

sql-server - 如何在 SQL Server 中使用 sp_send_dbmail 指定回复地址

sql-server - 关于 SQL Server 中嵌套事务的建议