MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中
基础篇已经描述:借用微软的SQL Server + ODBC 即可实现MySQL跨服务器间的数据查询。
而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL
以及用同样的方法,做的另一个连接名 MY_ODBC_MYSQL2
还实现了第一次查询,在MS SQL Server打开一个新查询,输入以下脚本:
SELECT Q.country_code, Q.country_name
FROM OPENQUERY(MY_ODBC_MYSQL, ’
SELECT country_code, country_name FROM country
WHERE Code = ‘‘IR’’
') AS Q
跨服务器的查询语句、更新语句、删除语句、插入语句都已经学会了,但是我想做的处理实在太复杂,在SQL Server 上写实在麻烦,在A服务器上的MySQL库有还现成的存储过程,如果我能远程命令A服务器执行一下存储过程,处理好之后,我直接查询就好了!
怎么调用跨服务器的存储过程呢?
我摸着石头过河,你搭着我肩膀过河吧。
假如A服务器上的MySQL库有 pr_do_xxx() 这个存储过程,它完成什么复杂统计我们就不管了。我关心如何调用?上干货
EXEC(‘CALL pr_do_xxx()’) AT My_ODBC_MYSQL; – 这样调用A服务器上MySQL的存储过程
注意:请记住以上套路!pr_do_xxx 是一个存储过程,没有参数,有参数也行。My_ODBC_MYSQL 是我们一直在用的连接到A服务器上链接名。中间还有一个 AT 不要漏了哦。
– 假如存储过程处理过后,数据存在country 表中。接着按上一篇的套路做就可以了,此处重写一次。
– 插入语句 从A数据库复制到B数据库的表中,假设My_ODBC_MYSQL连接A数据库,My_ODBC_MYSQL2连接B数据库
DECLARE @QryStr nvarchar(4000) – 查询脚本
SET @QryStr =
’
INSERT INTO OPENQUERY(My_ODBC_MYSQL2, ‘’
SELECT country_code, country_name
FROM country LIMIT 0, 1’‘)
SELECT Q.country_code, Q.country_name
FROM OPENQUERY(My_ODBC_MYSQL, ‘’
SELECT cty.country_code, cty.country_name
FROM country cty
WHERE cty.country_code = ‘’’‘’ + ‘SA’ + ‘’‘’‘’ +
’ ‘’) AS Q
';
PRINT @QryStr; – 这是调试的技巧,小本子抄下。
EXEC(@QryStr); – 执行脚本的另一个写法
注意:请记住以上套路,特别注意单引号的个数。为什么加个动态参数沙特,拼接就要用四个单引号呢?基础篇有描述!我摸着石头过河,你搭着我肩膀过河吧。
妙!高!实在是高!
加粉丝看
MySQL技巧系列之《未经证实的葵花宝典》:一篇可以当饭吃的MySQL文章,值得收藏
总结:借用微软的SQL Server + ODBC 即可实现MySQL跨服务器间的数据查询。这里演示了调用存储过程的方法,再使用 INSERT INTO OPENQUERY(…),实现跨服务器间复制(插入)记录,轻松实现先从A数据库处理数据,然后复制到B数据库的表中。