【问题标题】:I need to update customer information in one SQL Server database from another我需要从另一个 SQL Server 数据库更新客户信息
【发布时间】:2011-12-23 09:04:20
【问题描述】:

我是数据库新手,正在寻求帮助。我们编写了一个自定义应用程序,将其数据保存在 SQL Server 数据库中。我们还有一个基于 QuickBooks 销售点的 POS 系统。我们正在购买一个名为 QODBC 的产品,它为我们提供了一个与 QBPOS 兼容的 ODBS 接口。

SQL Server 数据库有一个名为customerinfo 的表,总共有 70 列信息中有 15 列是我们感兴趣的。

他们是:

id, txtfname, txtlname, txtemployer, txtphone, email, txtaddress, txtcity, txtstate, txtzip, IDENTIFICATIONType, IDENTIFICATIONumber, IDState, IDENTIFICATIONExpiry & dtpBirth.

这些列需要导入到 ODBC 可访问的 QBPOS 中,其中列的名称不同,QB 位于上述所有名称之前(例如 SQL Server 列是 id,因此 QBPOS 列是 QBid) .什么

我们想做的是定期(比如每分钟左右)将我们需要的数据导入 QBPOS。首先,除了每分钟左右的导入计划之外,是否可以通过我们可以放在桌面上的图标来执行此操作,并且仅在需要时才执行此操作?此外,我们是否能够只为现有客户更新 SQL Server 数据库中的更改数据?

提前感谢大家提供的任何帮助!!!

【问题讨论】:

  • 欢迎来到 StackOverFlow。您所有问题的答案都是“是的,有可能”;但是,如果您可以以“这是我的设置。我尝试了这个。我还应该尝试什么?”的格式提出问题,您将获得更多帮助

标签: sql sql-server odbc quickbooks


【解决方案1】:

作为一般规则,拉取数据比推送数据要简单得多。

这意味着您最好在 QBPOS 系统上设置一个计划,查询 MS SQL Server 以收集您需要的数据。但是,我对 QBPos 一无所知,也无法评论如何做到这一点,或者即使有可能。

另一种方法是一次将一条记录从 SQL Server 推送到 QBPOS。这当然是可能的,但我希望它会很慢......

  1. 在您的自动化流程将使用的 QBPOS 服务器上创建一个 LOGIN
  2. 在 MS SQL Server 上创建相同的 LOGIN(使用相同的密码)
  3. 在连接到 QBPOS 的 MS SQL Server 上创建一个 LINKED SERVER
  4. 创建一个存储过程,将记录插入到相应的 QBPOS 表中
  5. 转到 MS SQL Server 的代理调度程序并创建一个每分钟触发一次的新作业
  6. 设置该作业以执行您的存储过程

(虽然您的代码看起来像是一次性推送一整套数据,但如果您分析 SQL Server,您会发现它正在触发许多单独的插入/更新/删除命令。这就是为什么它是两者的较慢机制。)


要仅使用对 SQL Server 的更改来更新 QBPOS 服务器,您需要执行类似...
- 记录每次更改发生的时间(删除以及插入和更新)
- 在 QBPOS 服务器中存储它收到的最后一次更改的时间戳
- 检查 SQL Server 存储过程中的值以确定要推送的更改

注意:“推送的内容”和“收到的内容”之间存在差异,因为 QBPOS 数据库可以从备份等中恢复。这意味着“最后收到的数据”值必须存储在 QBPOS 数据库中。


这个答案是故意相当高的水平,因为编写所有这些的确切解决方案将占用大量空间。如果有任何你不熟悉的术语或概念,我建议你在 Books Online 或 Google 中搜索它们,看看你可以管理自己的东西,并尝试一下。在这类事情中,了解自己在做什么以及为什么这样做非常重要,而不是仅仅复制别人的明确指示。

【讨论】:

  • 嗯,这一切都需要在 QBPOS 之外进行,它没有任何设施可以做到这一点,这就是我们要购买第三方 ODBC 驱动程序的原因。由于所有这些都需要在外部发生,我可以在桌面上有一个图标,点击它会运行我必须编写的 sql 语句吗?
  • @user1113091 - 仅当您编写了应用程序或在 SQL Server 上运行查询的东西时。然后,您可以将代理计划作业替换为您运行以执行存储过程的应用程序。
  • @user1113091 - 如果您可以访问多个服务器,您可以在其中测试 LINKED 服务器的使用并编写此设置的测试版本,我会这样做。在购买组件以使其正常工作之前,测试并了解建议的解决方案。
  • 虽然我同意大多数 Dems 解决方案,但恕我直言,“推送”也可以基于 SET 完成。只需将整个当前情况从 QBPOS 提取到一个临时表中,与数据库中客户表的内容进行比较,然后根据需要一次性应用差异。 (您甚至想在 QBPOS 端进行删除吗?)。通过这个 [this][1] 链接服务器应该可以工作,但似乎需要一个“特殊”版本...在购买前尝试(如果可能)=)[1]:support.flexquarters.com/esupport/…
  • @deroby - 如果您执行INSERT INTO [linked-server].[db].[schema].[table] SELECT * FROM source 然后查看分析器,您会看到它们的 QUERY 是基于设置的,但 SQL Server 实际上会为每条记录触发一个 INSERT。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多