【问题标题】:Using EXEC() AT [Linked Server] for Insert data from local server使用 EXEC() AT [Linked Server] 从本地服务器插入数据
【发布时间】:2017-01-04 16:24:49
【问题描述】:

让我先解释一下我的设置,然后再告诉你我正在处理的问题:

我有两个数据库服务器:SQL 2008 和 MySql。我在 SQL 中有一个过程,它首先删除 MySql 中的一个表,然后用 SQL 本身的一些数据填充它。对于这两个操作,我都使用 OPENQUERY。但是,如您所知,它不知道支持大数据。即使在 MySql 中截断表也变得非常慢(删除 60k 行需要 14 分钟......太疯狂了!)。

所以我发现我可以使用这种语法进行截断:

在 LINKEDSERVER 执行('TRUNCATE TABLE table_name')

但是我还没有找到通过这个将 SQL 表的结果插入我的 MySql 表的语法。当我插入静态数据时它可以正常工作,例如这个例子:

EXEC ('INSERT INTO table_name (row1, row2) VALUES (value1, value2)') AT LINKEDSERVER

但我想插入来自 SQL 的结果,正如我所说的那样:

EXEC ('INSERT INTO table_name (row1, row2) SELECT r1, r2 FROM SQL_DB.sql_table_name') AT LINKEDSERVER

我敢打赌我做不到,因为在那种语法中,我在 MySql 服务器中执行 exec 并且 SQL 表不存在那里。那么如何在“EXEC() AT”语法中引用我的 SQL 表呢?

谢谢。

【问题讨论】:

  • 为什么需要使用 EXEC() AT?为什么不插入 LINKEDSERVER...tablename SELECT ... FROM ...?
  • > 那么我如何在“EXEC() AT”中引用我的 SQL 表简而言之,你不能,EXEC 执行的查询(有或没有 AT)在不同的范围内运行(在您的情况下,这是在 MySQL 上)并且您无法从 MySQL 访问 SQL Server 中的表。您坚持使用 OPENQUERY,或者您可以生成 INSERT INTO 语句(使用字符串的动态查询)并在 MySQL 服务器上执行,但这应该是计划 Z。SSIS 包而不是链接服务器怎么样?
  • 感谢您的回答。我告诉过要使用 SISS,但我还没有尝试过,因为我在这个 SQL 服务器上没有那个模块。我试图通过 LinkedServer 让它工作。
  • @AaronBertrand,我无法让 INSERT LINKEDSERVER...tablename SELECT ... FROM ... 工作。到目前为止,我无法引用没有 OPENQUERY 或 EXEC() AT 的 LinkedServer。
  • “无法上班”是什么意思?许多其他人拥有从 SQL Server 到 MySQL 的功能链接服务器。无论如何,我同意 Pred,如果根本问题是您将 很多 数据从 SQL Server 移动到 MySQL,那么无论如何我都会避免链接服务器/EXEC AT/OPENQUERY。不要试图用三轮车做自卸车的工作。

标签: mysql sql-server-2008 linked-server


【解决方案1】:

【讨论】:

    【解决方案2】:

    你也可以这样用:

    INSERT INTO [LinkedServer].Database.Schema.Table(Attributes)
    From
    Select (attributes) from Database.Schema.Table as TableAlias
    

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多