我想将数据从MS SQL Server数据库传输到MySQL数据库。因此,我向MS SQL添加了一个链接服务器,以便我可以使用Openquery在MySQL数据库中插入数据。我想优化数据传输的性能,并找到了提高MySQL数据加载性能的指南。
一个优化包括禁用AUTOCOMMIT模式,但我无法使用Openquery执行此操作。
我尝试了两种方式:
SELECT * from openquery(MYSQL,'SET autocommit=0')
exec openquery(MYSQL,'SET autocommit=0')
我得到了:
无法处理对象“SET autocommit = 0”。 OLE DB提供程序 链接服务器“MYSQL”的“MSDASQL”表示该对象 没有列或当前用户没有权限 对象
是否可以通过openquery执行此类语句?
谢谢, 迈克尔
答案 0 :(得分:1)
OPENDATASOURCE()和OPENROWSET()允许 add-hoc服务器连接。您不需要提前定义链接服务器。
OPENQUERY()依赖于提前定义的静态链接服务器。
这是MSDN参考。
http://technet.microsoft.com/en-us/library/ms188427.aspx
大多数示例使用OPENQUERY()作为命令的源或目标,显示DML(SELECT,UPDATE,DELETE,INSERT)。您要做的是执行会话命令。因此它会失败。此外,您甚至可能不知道会话是否在下次通话时保持打开状态。
为什么不将MYSQL服务器上的逻辑打包为存储过程。可以使用由四部分组成的名称在链接服务器上执行存储过程吗?
例如:
INSERT INTO #results EXEC server.database..stored-proc
这假设MYSQL与ORACLE具有相同的对象结构。由于我不是MYSQL人,我无法发表评论。我允许你研究这个小项目。
但这应该有效。它允许您在MYSQL数据库中打包任何类型的逻辑。
答案 1 :(得分:0)
如果要使用SSIS将数据从SQL Server传输到MYSQL。
要使ADO.NET目标正常工作,MySQL数据库需要启用ANSI_QUOTES SQL_MODE选项。可以在全局或特定会话中启用此选项。要为单个会话启用它:
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.
Matt Mason在回复时这样做了。关键是第2项,使用相同的连接。
http://blogs.msdn.com/b/mattm/archive/2009/01/07/writing-to-a-mysql-database-from-ssis.aspx#comments
此外,CozyRoc有一个自定义ODBC驱动程序,可能比MYSQL中的免费驱动程序更快/更可靠。