【问题标题】:How to automate a script to insert data into SQL Server table如何自动化脚本以将数据插入 SQL Server 表
【发布时间】:2021-09-27 16:20:31
【问题描述】:

我有一个 excel 文件,它有一列,列中的数据是:

INSERT INTO dbo.Test (Id1, Id2, Id3) 
VALUES (1, 2, 3)

有人可以告诉我如何通过 SSIS 自动执行此操作,以便插入语句直接将数据加载到表中吗?

我可以创建一个 SSIS 包来将此 excel 文件加载到表中,但是我需要该列来执行并将数据插入到测试表中。

任何建议都会有所帮助。

谢谢

【问题讨论】:

  • 您不应该在列中存储 SQL 脚本,而应该只存储值。在这种情况下,单元格 A1:C1 的值应分别为 ID1ID2ID3,单元格 A2:C2 的值应分别为 123。然后使用 Excel 源导入数据是微不足道的。
  • 为什么要把事情复杂化?如果你的“脚本”(那个单一的插入语句)就是你所拥有的,只需将它放在脚本文件中,你可以随时使用各种工具对任何数据库运行它。这似乎是XY problem
  • 如果您想自动化 SQL 脚本,powershell 是执行此类任务的流行工具;从 Excel 加载数据很容易,但它应该只是数据,如果有人编辑了 excel 文件并将单元格的内容更改为“drop table....”或更糟,会发生什么?跨度>
  • 将问题重述为是否准确:在 SSIS 包的上下文中,我需要将 Excel 文件中的特定单元格作为字符串读取。然后我需要使用该字符串作为对数据库的查询?
  • 有很多不同的方法可以实现这一点,但是,您认为让一些 Excel 用户传递查询以盲目地在生产服务器上运行是个好主意吗?

标签: sql-server ssis


【解决方案1】:

据我了解,您已经拥有一个完整的 SSIS 包,其中包含与 excel 的连接和与数据库的连接,最后还有管道中的转换(从源获取数据,将其推送到目标)。

在 SQL Server 中执行 SSIS 包的方法有多种(执行为 bat 或 cmd),但我建议您使用官方的方法。

您可以在此处找到如何将 SSIS 部署到 SQL Server 的完整分步教程: https://docs.microsoft.com/en-us/sql/integration-services/packages/deploy-integration-services-ssis-projects-and-packages?view=sql-server-ver15

基本上,在项目上的Visual Studio中右键单击,然后单击部署...按照步骤...

看这里: https://docs.microsoft.com/en-us/sql/integration-services/packages/deploy-integration-services-ssis-projects-and-packages?view=sql-server-ver15#to-deploy-and-execute-a-package-using-stored-procedures 有一步一步的教程如何从存储过程运行你的 SSIS 包。

现在您必须决定如何自动运行存储过程本身。此外,您还有很多方法,例如您自己在 SQL Server 之外实现计时器,或使用 Windows 任务计划程序。

由于我不太了解您的环境,我建议您使用 SQL Server 代理创建计划作业的简单方法(它必须安装在您的 SQL Server 实例上)。

分步教程在这里: https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-job?view=sql-server-ver15

【讨论】:

  • 您好 Matej,非常感谢您的回复。抱歉,如果我不清楚我的问题是 excel 文件中的一列有 SQL 插入语句。我如何运行该语句以便插入数据?我的 SSIS 包基本上会获取该列并输入到表中,但是我希望执行来自 excel 列的插入语句并将数据加载到表中
  • 你好约翰,我想我现在明白了。 SSIS 中也有几个选项,但也没有 SSIS。 1.因此,完全按照我在回答中告诉您的操作+将方法分为2个步骤。还插入包含您的插入语句的列。例如,您还可以为这些数据创建不同的“临时表”。然后创建不同的存储过程,这些存储过程也将在第一个之后从 Job 执行。然后您可以使用 SQL SERVER 中的 sp_executesql 并设置 sql 命令并在您的 SP 中执行它...例如 @_sqlcmd varchar(255) = select cmd from stagingTable execute sp_executesql @_sqlcmd
  • 但我也必须告诉你,你必须从 excel 单元格中读取 sql 语句,这很奇怪......正确存储数据并正确执行 SSIS 管道总是更好。
  • 你好 Matej,我知道这个要求很奇怪,但我现在必须忍受它。所以,我创建了一个临时表 dbo.stg,它有一个名为“脚本”的列,在该列中我有插入语句。您能否帮助我与 SP 有关如何拆分“脚本”列以将该插入加载到 dbo.test 上的 3 个不同列中,例如 ID1、ID2、ID3
  • 例如(如果您的表包含多行,例如循环执行(光标或while)):declare @_sqlcommand varchar(255) = (select Script from dbo.stg) exec sp_executesql @ _sqlcommand ...整个命令在单元格脚本中... Ofc,如果命令更长,则使用超过 varchar(255)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2012-02-22
相关资源
最近更新 更多