将excel行从更改命名范围传输到sql server db的最佳方法是什么?

将excel行从更改命名范围传输到sql server db的最佳方法是什么?,sql,excel,ssis,onchange,Sql,Excel,Ssis,Onchange,我有一个与股票市场价格相关的动态excel表。从该工作表中的命名范围中,我希望触发任何行更改,以将选定列导出为数据库表中的新记录 对于要插入到数据库表中的许多excel行数据更改,这将是一个错误 什么是健壮可靠连接的最佳技术? 有关于更改行导出到sql的示例或教程吗? 您可以采取几种方法。您可以设置一个作业来调用SSIS包,以便在进入最终表之前,每隔X分钟或X小时将电子表格导入临时数据库表。导入和添加新信息或更新现有信息的过程将使用应用合并命令的SQL任务执行,如下所示。在本例中,Row1字段是

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

对于要插入到数据库表中的许多excel行数据更改,这将是一个错误

什么是健壮可靠连接的最佳技术? 有关于更改行导出到sql的示例或教程吗?
您可以采取几种方法。您可以设置一个作业来调用SSIS包,以便在进入最终表之前,每隔X分钟或X小时将电子表格导入临时数据库表。导入和添加新信息或更新现有信息的过程将使用应用合并命令的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\u导入表是临时暂存表,Tests表是最终导入位置,Tests\u历史记录跟踪每个唯一记录的历史记录。该过程完成后,您可以删除Tests\u import的内容,或者将其设置为SSIS包中应用的第一步。通过这种方式,您可以将初始导入与最终测试表进行比较,以防再次运行SSIS包之前出现任何问题


希望这能有所帮助。

我见过一些SSI TUT,但其中没有一个解释工作表上的条件传输更改,我相信我知道如何通过vba和sql命令实现这一点,但我想确定最佳连接技术,如果我从未尝试过,我想看看它的示例!!这是一个非常好的方法。我最初尝试在excel中本地开发事务记录,从源价格服务器接收数据,但也面临触发excel引用单元格值更改的一个小问题,因为这无法被工作表更改事件捕获!。。。非常感谢Kosh兄弟Kosh兄弟我不知道如何为你获取联系信息。。能给我一个你的直接联系方式吗!。。谢谢