【问题标题】:Schedule Export SQL Server records to CSV file including updates计划将 SQL Server 记录导出到 CSV 文件,包括更新
【发布时间】:2017-12-13 11:58:50
【问题描述】:

我是这个社区的新手,这是我的第一个问题,如果无意中违反了任何社区规则,请见谅。

我需要创建一个功能/计划,将每四小时后在 SQL SERVER 2012 表中添加或更新的数据导出到 CSV 文件。我的前端是 SAP B1。我拥有的唯一工具是 SQL Server Management Studio。

有人可以帮忙吗?

提前致谢。

问候, 卡努

【问题讨论】:

  • 是否允许更改表/将表添加到数据库? SAP B1 是如何进入其中的?您是否从 SAP 数据库中提取数据?
  • @Nick.McDermaid:不,由于 SAPB1 的 SLA,我不允许对数据库进行任何添加或更新语句。是的,我正在从 SAP B1 SQL Server 数据库中提取数据。
  • 除非表中有实际的“更新”字段,否则无法确定更新了哪些记录。你真正想做什么?您显然是在尝试在某处复制 SAP 数据库吗?数据库有多大?最大的表有多少条记录?对于具有大量表的数据库,构建差异复制系统很快就会变得复杂。导出整个数据库通常更简单、更容易。你的 CSV 去哪儿了?顺便说一句,使用制表符分隔而不是逗号分隔更可靠。
  • 不,我不想复制完整的数据库。我们需要为特定表中添加的新记录或更新的旧记录创建一个 csv 文件。只有某些列需要在该 csv 上。然后,我们的客户门户网站会在每四个小时后选择该 csv,并更新该门户网站上的相同记录。我不关心门户网站将如何获取 csv。我只需要确保 csv 存在于特定位置,并且涵盖所有添加和更新。相关表确实有列、更新日期时间和更新用户。
  • 好吧,您的第一个挑战是在该表中找到一个字段,告诉您上次修改记录的时间。如果没有,则无法识别修改的记录,您需要获取所有记录。

标签: sql-server ssms sapb1


【解决方案1】:

您可以在该表中使用默认值 0 来“导出”一个新列名。

制作一个 SSIS (SQL SERVER INTEGRATION SERVICES) 作业/脚本,该作业/脚本将仅导出那些导出时为 0 的记录,并且在成功导出相同的脚本后,它将更新导出导出的行为 1。

对于更新,您还应该创建一个类型为“而不是更新”的触发器,该触发器链接到该表,如果列(导出以外的列! ) 已更新。

将 SSIS 作业计划设置为 4 小时,一切顺利:)

我认为 SSIS 是一个更好的解决方案,因为:

  1. 您需要一个作业以 4 小时间隔的计划运行,并在之后进行更新 在导出的列上。

  2. SSIS 非常易于使用,它有一个可视化界面,您可以在其中 拖放对象,如 sql 脚本等和

  3. 使用 SSIS 非常容易导出为 .csv 、xls 甚至是 Oracle、Mysql 等其他数据库。

希望对你有帮助!

【讨论】:

  • 感谢@Radu。以前从未与 SSIS 合作过。有没有更简单的方法......比如使用 SQL Server 代理将查询输出安排到 SSMS 上的 CSV 文件?
  • 我认为 SSIS 是一个更好的解决方案,因为: 1. 您需要一个作业以 4 小时的间隔运行,然后在导出的列上进行更新。 2. SSIS 非常易于使用,它有一个可视化界面,您可以在其中拖放对象,如 sql 脚本等 3. SSIS 非常容易导出为 .csv 、 xls 甚至其他数据库,如 Oracle、Mysql 等.如果您觉得我的答案有用,您可以标记为您的问题的答案(答案下方的复选标记):)
  • @Kanu 如果SSIS太复杂,可以试试BCP
  • @Radu - 谢谢。如何开始在 SSIS 上工作;它是 SSMS 的一部分吗?
  • 您使用哪个版本的 SQL?在 SQL 2012 上,我在 Microsoft Visual Studio 中创建了一个 SSIS 类型的新项目。
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多