【问题标题】:SSMS "SELECT * INTO" from MSSQL Table to a Linked MySQL ServerSSMS "SELECT * INTO" 从 MSSQL 表到链接的 MySQL 服务器
【发布时间】:2017-02-14 00:30:56
【问题描述】:

我需要将一些表从 MSSQL 服务器传输到 MySQL 服务器。

我已成功将 Windows 主机上的 SSMS 连接到我的 linux 机器上的 MySQL 服务器。 “链接服务器”出现在对象资源管理器中,我可以在 MySQL 服务器上执行查询。

sql select * from openquery(LINKED_SERVER_NAME, "select * from mysqltable.customers");

我对 MSSQL 完全是个菜鸟,对 openquery 有点困惑。查询是“只读”的,还是我可以实际将 MSSQL 表的内容选择到链接服务器上的表中?

我读过的所有 MSDN 页面都让人想起 80 年代那些旧的霹雳舞教学视频。 IE。一个非常简洁的例子,然后是完全的疯狂。

我看到了很好的例子,展示了如何使用 openquery 将 remote MySQL 数据库的内容选择到 MSSQL 数据库中。不幸的是,我不知道是否有办法扭转这种语法。

如果这是一个愚蠢的问题,我真的很抱歉,但我只是没有得到任何牵引力。

【问题讨论】:

  • 这项工作是在 MSSQL 上完成的。
  • 我得盯着屏幕看一会儿。
  • AFAIK 没有针对 MySql 的 OPENQUERY。
  • 很明显,在您的插入示例中,必须执行一个“空”查询来返回您希望插入的字段名。这是一个令人费解的混乱(SSMS,不是你的例子)。我一定会为下一个人展示我的作品。这太可怕了。

标签: mysql sql-server ssms


【解决方案1】:

回答缓慢且可能很糟糕

使用@McNets / Amir Mohtasebi@bluefeet 提供的线索,我已经能够拼凑出一些东西。

我尝试将 MSSQL 表直接复制到 MySQL 数据库中。我仍然不清楚 openquery 是否有可能。

循环查询结果并逐一插入记录

declare @i int=0
declare @count int
declare @idcustomer int
declare @customerType int 

select @count = count(*) from customers

while (@i < @count)
begin
    select @idcustomer = idCustomer, @customerType = customerType from customers
    order by idcustomer asc offset @i rows fetch next 1 rows only

    insert openquery(
        REMOTE_STORE,
        'select idcustomer, customerType from customers where 1=0'
    ) values(
        @idcustomer,
        @customerType)

    set @i = @i + 1;
end

正如人们所预料的那样,这需要永远的南方,并且需要为每个字段进行设置。如果有人有更好的技术(可能是任何人使用 T-SQL),我一定很乐意看到它。

【讨论】:

    【解决方案2】:

    您是否尝试过以下语法中的基本查询:

    select * into newtable from openquery(LINKED_SERVER_NAME, "select * from mysqltable.customers");

    从 [linkedserver].[database].[schema].[tablename] 中选择 * 进入新表

    【讨论】:

    • 那是我第一次去的地方,但你永远是我的不二子。
    猜你喜欢
    • 2011-02-17
    • 2011-05-19
    • 2013-05-17
    • 1970-01-01
    • 2015-07-08
    • 2014-06-22
    • 2019-02-27
    • 2020-04-28
    相关资源
    最近更新 更多