首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Openquery的特殊语句

带有Openquery的特殊语句
EN

Stack Overflow用户
提问于 2014-01-19 13:39:17
回答 2查看 1K关注 0票数 0

我想将数据从MySQL数据库传输到MySQL数据库。因此,我向MySQL添加了一个链接服务器,以便可以使用Openquery将数据插入到MySQL数据库中。我希望优化数据传输的性能,并找到了在MySQL中提高数据加载性能的指导方针。

一种优化包括禁用AUTOCOMMIT模式,但是我无法使用Openquery完成它。

我两种方法都试过:

代码语言:javascript
复制
SELECT * from openquery(MYSQL,'SET autocommit=0') 

exec openquery(MYSQL,'SET autocommit=0') 

我得到了:

无法处理对象“设置autocommit=0”。用于链接服务器"MYSQL“的OLE DB提供程序"MSDASQL”表示对象没有列,或者当前用户对该对象没有权限。

是否可以通过openquery执行这样的语句?

谢谢你,Mickael

EN

回答 2

Stack Overflow用户

发布于 2014-01-19 19:07:25

OPENDATASOURCE()和OPENROWSET()允许add服务器连接。您不需要提前定义链接服务器。

OPENQUERY()依赖于提前定义静态链接服务器

这是MSDN引用。

http://technet.microsoft.com/en-us/library/ms188427.aspx

大多数示例使用OPENQUERY()作为命令的源或目标来显示DML (SELECT、UPDATE、DELETE、INSERT)。您要做的是执行会话命令。因此,它将失败。此外,您可能甚至不知道会话是否在下一次调用中保持开放状态。

为什么不将MYSQL服务器上的逻辑打包为一个存储过程。存储过程可以通过使用四部分的名称在链接服务器上执行吗?

例如:

插入#结果EXEC服务器.数据库.存储-proc

这假设MYSQL具有与ORACLE相同的对象结构。因为我不是MYSQL的人,所以我不能评论。我允许你研究这个小项目。

但这应该管用。它将允许您在MYSQL数据库中打包任何类型的逻辑。

票数 1
EN

Stack Overflow用户

发布于 2014-01-21 13:39:27

如果要使用SSIS将数据从Server传输到MYSQL。

要使ADO.NET目标正常工作,MySQL数据库需要启用ANSI_QUOTES SQL_MODE选项。此选项可以是全局启用的,也可以是针对特定会话的。要使它能够进行一次单独的会议:

代码语言:javascript
复制
1 - Create an ADO.NET Connection Manager which uses the ODBC driver
2 - Set the connection manager’s RetainSameConnection property to True
3 - Add an Execute SQL Task before your data flow to set the SQL_MODE – Ex. set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
4 - Make sure that your Execute SQL Task and your ADO.NET Destination are using the same connection manager.

马特·梅森是在回复时这么做的。关键是第2项,使用相同的连接。

http://blogs.msdn.com/b/mattm/archive/2009/01/07/writing-to-a-mysql-database-from-ssis.aspx#comments

另外,CozyRoc有一个定制的ODBC驱动程序,它可能比MYSQL的免费驱动程序更快/更可靠。

http://cozyroc.com/ssis/odbc-destination

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21217477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档