更新表格中的行数(cca 100万)的最快方法是什么, 使用标签中的技术?
声明如下:
UPDATE MyTable SET MyColumn = 2 WHERE MyTable.ID = 1
UPDATE MyTable SET MyColumn = 3 WHERE MyTable.ID = 3
UPDATE MyTable SET MyColumn = 5 WHERE MyTable.ID = 7
UPDATE MyTable SET MyColumn = 1 WHERE MyTable.ID = 45
UPDATE MyTable SET MyColumn = 0 WHERE MyTable.ID = 234
等等..补充说明:
另一种可能的描述。 给定一个ID列表,与一个值配对,使用配对值(MyColumn)更新ID主键(MyTable.ID)记录的最快方法是什么?只是为了更清楚。我得到一个(源)文件,其中一些值写入文件。从中提取数据以便导入(更新)到数据库的源文件如下所示:
2, 1
3, 3
5, 7
1, 45
0, 234
我会接受使用纯TSQL的答案,或来自ORM或任何其他提供商的答案。
答案 0 :(得分:4)
这取决于更新文件的格式。如果它是分隔文件或Excel电子表格,那很简单。使用Sql server批量导入工具将文件导入临时表。然后通过加入更新。如果您的文件格式不易导入,请将其格式化为易于导入的格式。
UPDATE
Table
SET
Table.col1 = other_table.col1,
Table.col2 = other_table.col2
FROM
Table
INNER JOIN
other_table
ON
Table.id = other_table.id
https://stackoverflow.com/questions/2334712/sql-server-update-from-select
答案 1 :(得分:1)
Brian的某种形状或形式的解决方案是要走的路。对于该数据量,如果您有可以使用的磁盘空间,则完全导入后跟查询更新是最简单,最快速的方法。
如果您没有磁盘空间,那么您需要批量工作。导入5000左右,更新,删除导入,然后重复。这是一个完整的T / SQL方法。您可以使用BCP实用程序或BULK INSERT语句来导入数据。
对于基于C#的解决方案,您可以使用.NET SqlBulkCopy类并为其提供IDataReader源,可以是自定义阅读器,也可以是OdbcConnection。
这也是您可能考虑为其构建SSIS包的方案。