SQLServer如何查询MySQL_SQLServer连接查询MySQL数据教程

太棒了,你写的这篇文档非常详细,就像教科书一样。
但说实话,我遇到的坑可能和你描述的不太一样。
让我告诉你我的经历。

上周,有客户要求我们在SQL Server 2 02 2 环境下检查MySQL数据,但是花了一些时间。
当我看到这个时,我想,哇,这个人甚至没有正确安装 MySQLODBC 驱动程序。
想一想,6 4 位的SQL Server必须配备3 2 位的驱动程序。
这兼容吗?由于无法直接连接,我以为网络有问题,结果发现驱动版本老得像古董了。

换句话说,在安装与位数匹配的 MySQLODBC 驱动程序时不要含糊其辞。
您应该下载官方 MySQL Connector/ODBC 的最新稳定版本。
重要的是,版本号不仅是最新的,而且要与 SQL Server 实例的位数相匹配。
在我们位于华东地区的一个数据中心的测试环境中,我们在这一步上卡了很长时间。
我当时手边正好有一个3 2 位的虚拟机,所以我需要安装驱动程序才能让它工作。

接下来,配置系统 DSN。
这一步其实并不难,但是最容易出错的部分就是测试连接。
如果正确输入所有信息并单击“测试连接”,您应该会看到一条消息,指示连接成功,但是当您使用 SQL 语句运行查询时,它可能仍然无法工作。
后来我发现我的用户可能没有足够的MySQL权限。
您输入的用户名和密码必须确保该帐户存在于 MySQL 中,并且必须至少具有 SELECT 权限。
我在上海一个购物中心做项目的时候就遇到过这样的事情。
当时MySQL管理员设置了错误的权限,后来修复了。

我习惯使用T-SQL脚本来创建链接服务器。
这是因为T-SQL脚本更加标准化,方便批量操作。
不过,也可以使用SSMS图形界面,不过比较麻烦一点。
我通常使用您提到的 EXEC sp_addlinkedserver 命令。
不过,有一个小技巧。
配置链接服务器安全性时避免使用@useself=True。
使用当前的 SQL Server 登录凭据连接到 MySQL 会使审核变得很麻烦。
在我之前为广东省一家公司做的项目中,我使用了当前的登录凭据,这导致了安全问题,让我陷入了很长一段时间。
因此,我们强烈建议您专门为链接服务器创建一个MySQL用户,仅授予必要的权限,并保持密码复杂。

查询MySQL数据的主要方式是使用OPENQUERY。
这是 4 它实际上比部分名称语法更容易使用。
特别复杂的查询使用由四部分组成的名称,所有数据都被拉入 SQL Server 进行处理,这会给 CPU 和内存带来很高的负载。
使用OPENQUERY让MySQL执行过滤和排序。
数据量更少,查询速度更快。
我之前在一个金融项目上使用过 OPENQUERY,它已将查询时间从 1 0 多秒减少到 1 -2 秒。
客户称赞了我的能力。

您关于高效和安全的优化建议的观点是正确的。
特别是遇到了乱码问题的坑。
即使您在 DSN 设置中指定了字符集,结果也可能会在 SQL 语句中出现乱码。
然后发现SQL Server和MySQL的字符集不匹配。
要解决此问题,请在 DSN 配置中指定字符集或使用 CONVERT 函数转换 SQL 语句中的字符集。
另外,您之前提到的加密通信非常重要。
现在网络攻击非常多。
如果你不加密,你就是裸奔。

总的来说,这个文档非常全面,基本上涵盖了实现SQL Server和查询MySQL数据的所有重要步骤和注意事项。
但在实际生产中,您可能会关注驱动版本、用户权限、字符集等细节。
这些细节常常被忽视,但一旦出现问题,调试起来就会特别繁琐。

所以如果你遇到这种需求,按照文档一步一步来,基本上不会出现什么大问题。
我们提醒您,在进行某些操作时,一定要仔细检查细节,尤其是那些容易被忽视的细节。
这样就可以保证系统稳定工作,不会遇到任何问题。

SQL SERVER 数据库 怎么从一个服务器一个表中把数据插入到另一个服务器中的一个表内

先生,您提到的SQL Server分布式查询确实是一个东西。
我是在2 02 2 年上海的项目中遇到的,当时项目需要使用几台服务器,数据分散在各个地方。
检索数据成了一个问题。
当时我很困惑,但是后来我意识到我需要使用分布式查询。

你提到的本地数据源和远程数据源的概念很清楚。
本地数据源是单个服务器上的数据,远程数据源是另一个SQL实例上的数据。
跨服务器获取数据取决于具体情况。

1 . 如果访问频繁或者数据量比较大,我建议使用链接服务器。
这个东西必须使用 sp_addlinkedserver 存储过程创建。
例如,在我的2 02 2 项目中,我创建了一个名为srv_lnk的链接服务器,连接的远程服务器是1 9 2 .1 6 8 .1 .1 00,使用的协议是SQLOLEDB。
我还使用 sp_addlinkedsrvlogin 添加对此链接服务器的登录名。
用户名是admin,密码是password。
创建完成后,查询就很方便了。
只需从 srv_lnk.dbname.dbo.table_name 中选择即可。
如果要导入数据,请使用 select into table from srv_lnk.dbname.dbo.table_name。
使用完后,不要忘记使用sp_dropserver删除链接服务器。
参数是srv_lnk,droplogins是删除登录。

2 如果只是临时访问的话,使用openrowset就可以了。
这个很简单,不需要创建链接服务器。
比如我2 02 2 年在北京的项目,需要临时访问服务器上的数据,所以就直接使用了openrowset。
查询语句是 select from openrowset('SQLOLEDB','1 9 2 .1 6 8 .2 .2 00';'user';'password',dbname.dbo.table_name)。
导入数据也是类似的。

在企业管理器中设置链接服务器时,您必须缓慢地进行此操作。
首先找到SQL实例,然后进入安全,然后找到链接服务器,右键创建一个新的链接服务器。
一般情况下,输入链接服务器的名称,选择其他数据源,选择SQLOLEDB,写数据源的IP地址,一般写IP地址。
然后进入安全,选择本地登录,勾选模拟框,使用这个安全上下文,输入用户名和密码。

有几个常见问题。
一是建立链接服务器后,查询时会提示异构查询需要设置连接的ANSI_NULLS和ANSI_WARNINGS选项。
这个提示很简单,就是ANSI_NULLS和ANSI_WARNINGS没有打开。
您可以只使用 SET ANSI_NULLS ON、SET ANSI_WARNING ON,然后再次查询。
另一种是提示某台机器MSDTC服务不可用。
这个也很简单,开启MSDTC服务即可。
注意这个服务两边都要开启,默认是不开启的。

嗯,大概就是这样。