【问题标题】:its there a way to connect a mysql table to a mssql table? [duplicate]有没有办法将 mysql 表连接到 mssql 表? [复制]
【发布时间】:2014-12-17 23:34:32
【问题描述】:

我知道这个问题很愚蠢,但我必须问它有没有办法将 mysql 数据库表连接到 mssql 数据库表?

我有一个 mysql 表,需要从旧 SQL 2000 db 服务器中的表中获取数据,是否有办法自动连接它们以在每次在旧服务器中添加或更新数据时自动获取数据?

有没有办法自动连接它们? 我使用一个应用程序从旧应用程序中复制数据并每 6 秒将其添加到新应用程序中,但这很痛苦,因为有时它关闭了这个小应用程序,一切都变得一团糟。

【问题讨论】:

    标签: mysql sql-server


    【解决方案1】:

    没有。不是来自 MySQL 内部。没有内置功能可以连接到远程数据库,例如 SQL Server,

    但是可以让 SQL Server 与 MySQL 数据库通信。我曾经使用 SQL Server 2005 Standard 和 MySQL 5.1。

    我必须使用从 MySQL 下载的 MySQL ODBC 驱动程序在 SQL Server 系统上设置 ODBC 数据源。 (运行 odbcad32 进行设置,或者您可能需要 64 位等效项)。

    我必须在 SQL Server 中启用一些配置选项,以允许远程过程调用和结果。

    我在 SQL Server 2005 中创建了一个引用 ODBC 数据源的 LINKED SERVER。 (我认为我还必须在 ODBC 数据源中调整一些设置。

    使用该设置,“技巧”是实际的神秘 Transact-SQL 构造,有几种方法可以做到这一点,其中一些具有比其他更好的性能。 (我将其设计为不会让大量数据淹没内存,我们以可管理的块进行传输。)

    我不需要从 SQL Server“推送”到 MySQL;我正在将数据从 MySQL 中“拉”到 SQL Server 中。但我认为相同的设置可以用于执行 INSERT 和 UPDATE 语句。

    为了将结果集从 MySQL 检索到 SQL Server,我创建了一个本地临时表(在 SQL Server 上),并从 MySQL 查询中提取结果以填充该表。这对我来说是最有效的。

    我的存储过程中的一些 sn-ps:

    我留下了关于启用链接服务器需要做什么的评论(我只需要对 MySQL 执行 SELECT 语句。)

    -- -- to enable RPC for a linked server
    -- exec sp_helpserver
    -- exec sp_serveroption @server='LOCALHOST_MYSQL_xxxx_RO', @optname='rpc', @optvalue='true'
    -- exec sp_serveroption @server='LOCALHOST_MYSQL_xxxx_RO', @optname='rpc out', @optvalue='true'
    -- exec sp_helpserver
    
       -- mysql database from which we retrieve interval data
       DECLARE @linked_server_name NVARCHAR(255)
       SET @linked_server_name = N'[LOCALHOST_MYSQL_xxxx_RO]'
    
       IF OBJECT_ID(N'tempdb..#t_pxxxx') IS NOT NULL DROP TABLE #t_pxxxx
       CREATE TABLE #t_pxxxx ( pxxxx_xxxx_id BIGINT, ...
    
       DECLARE @s_query NVARCHAR(MAX);
       SET @s_query = 'SELECT r.id AS pxxx_xxxx_id, ... ';
    
       DECLARE @stmt NVARCHAR(MAX);
       SET @stmt = N'INSERT INTO #t_pxxxx
       SELECT * FROM OPENQUERY(' + @linked_server_name + N','''
         + REPLACE(@s_query,'''','''''') + N''' ) ORDER BY 1';
    
       -- for debug, show the SQL statement
       -- PRINT N'@stmt: ' + @stmt;
    
       -- populate #t_pxxxx (local temporary table) from source
       TRUNCATE TABLE #t_pxxxx;
       EXECUTE(@stmt);
    

    我测试了几种变体,使用@tables#tables,它们的实际工作机制有些不同...对我来说最有效的是在 SQL 上创建一个临时表 (#table)服务器,然后用 MySQL 查询的结果填充它,然后从临时表中处理。

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2021-03-05
      相关资源
      最近更新 更多