0

我有一个与股票市场价格相关的动态 Excel 表。从这张表中的命名范围,我想触发任何行更改以将选定的列导出为数据库表中的新记录。

这对于要插入到数据库表中的大量 excel 行数据更改来说是无效的。

  1. 什么是稳健可靠连接的最佳技术?
  2. 有关更改行导出到 sql 的任何示例或教程?
4

1 回答 1

0

您可以采取多种方法。您可以设置一个作业来调用您的 SSIS 包,以每隔 X 分钟或几小时将电子表格导入到暂存数据库表中,然后再进入最终表。然后将使用应用 MERGE 命令的 SQL 任务执行导入和添加新信息或更新现有信息的过程,如下所示。在此示例中,Row1 字段是每条记录的唯一值(TestID 是数据库表 Tests 唯一的自动递增主键)。您还可以使用字段组合来唯一地定义每条记录。虽然您没有要求这样做,但最好包含一个历史表来跟踪更改并保持可追溯性。

MERGE dbo.Tests AS t
USING (SELECT Row1, Row2 FROM dbo.Tests_import) AS s
ON (t.Row1 = s.Row1)
WHEN NOT MATCHED THEN
    INSERT (Row1, Row2, DateCreated) VALUES(s.Row1, s.Row2, GETDATE())
WHEN MATCHED and s.Row2 <> t.Row2 THEN
    UPDATE SET t.Row2 = s.Row2, t.DateUpdated = GETDATE()
OUTPUT $action, inserted.TestID, inserted.Row1, inserted.Row2, inserted.DateCreated, inserted.DateUpdated
INTO dbo.Tests_History ([Action], fk_TestID, Row1, Row2, DateCreated, DateUpdated);  

在上面的示例中,Tests_import 表是临时登台表,Tests 表是最终导入位置,Tests_History 跟踪每个唯一记录的历史记录。该过程完成后,您可以删除 Tests_import 的内容或将其设置为在 SSIS 包中应用的第一步。这样,您可以将初始导入与最终测试表进行比较,以防在再次运行 SSIS 包之前出现任何问题。

希望这可以帮助。

于 2012-12-14T23:36:44.623 回答