我在xls中有200K +行数据,并且根据需要我需要使用xls数据更新数据库表(2个表)。 我知道将数据从xls复制到SQL服务器表的过程,但我正在努力使用更新数据库表的方法。
我想不出除了编写游标之外的任何其他方法,我不想将光标方法作为更新 使用光标的200k +数据可能会占用事务日志,并且需要很长时间才能完成更新。
有人可以帮助我做其他事情来实现这一目标。
答案 0 :(得分:0)
使用以下技术。
1 - 将数据导入临时表。使用导入/导出工具是执行任务的一种方法目标表应该在丢弃或临时数据库中。
http://technet.microsoft.com/en-us/library/ms141209.aspx
2 - 确保EXCEL数据和TABLE数据之间的数据类型相同。
3 - 确保现有目标[TRG_TBL] TABLE具有主键。确保加载到[SRC_TBL]表中的EXCEL数据具有相同的密钥。您可以添加非聚集索引以加速UPDATE语句中的JOIN。
4 - 使用ALTER TABLE命令将[FLAG]列作为INT NULL添加到[TRG_TABLE]。
5 - 确保在大型UPDATE之前和之后完成完整备份。您还可以使用DATABASE SNAPSHOT。关键是在需要时制定回滚计划。
-- Select correct db
USE [TRG_DB]
GO
-- Set to simple mode
ALTER DATABASE [TRG_DB] SET RECOVERY SIMPLE;
GO
-- Update in batches
DECLARE @VAR_ROWS INT = 1;
WHILE (@VAR_ROWS > 0)
BEGIN
-- Update fields and flag on join
UPDATE TOP (10000) T
SET
T.FLD1 = S.FLD1,
-- ... Etc
T.FLAG = 1
FROM [TRG_TABLE] T JOIN [SRC_TABLE] S ON T.ID = S.ID
WHERE T.[FLAG] IS NULL
-- How many rows updated
SET @VAR_ROWS = @@ROWCOUNT;
-- WAL -> flush log entries to data file
CHECKPOINT;
END
-- Set to full mode
ALTER DATABASE [MATH] SET RECOVERY FULL;
GO
总之,我给了你完成这项工作的所有工具。只需根据您的特定情况修改它们。
PS:这是我博客上关于大型删除的工作代码。同样的逻辑适用。
PPS:我没有检查示例代码的语法。这是留给你的。