Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在[链接服务器]上使用EXEC()从本地服务器插入数据_Mysql_Sql Server 2008_Linked Server - Fatal编程技术网

Mysql 在[链接服务器]上使用EXEC()从本地服务器插入数据

Mysql 在[链接服务器]上使用EXEC()从本地服务器插入数据,mysql,sql-server-2008,linked-server,Mysql,Sql Server 2008,Linked Server,让我先解释一下我的设置,然后再告诉您我正在处理的问题: 我有两个数据库服务器:SQL2008和MySql。我在SQL中有一个过程,首先在MySql中删除一个表,然后用SQL本身的一些数据填充它。对于这两个操作,我都使用OPENQUERY。但是,正如您所知,它不知道支持大数据。在MySql中截断表的速度变得非常慢(删除60k行需要14分钟……太疯狂了!) 所以我发现我可以用这个语法来截断: LINKEDSERVER上的EXEC('TRUNCATE TABLE_name') 但是我还没有找到通过这个

让我先解释一下我的设置,然后再告诉您我正在处理的问题:

我有两个数据库服务器:SQL2008和MySql。我在SQL中有一个过程,首先在MySql中删除一个表,然后用SQL本身的一些数据填充它。对于这两个操作,我都使用OPENQUERY。但是,正如您所知,它不知道支持大数据。在MySql中截断表的速度变得非常慢(删除60k行需要14分钟……太疯狂了!)

所以我发现我可以用这个语法来截断:

LINKEDSERVER上的EXEC('TRUNCATE TABLE_name')

但是我还没有找到通过这个将SQL表的结果插入MySql表的语法。当我插入静态数据时,它工作正常,如以下示例:

EXEC('INSERT INTO table_name(row1,row2)值(value1,value2)')在LINKEDSERVER上

但是我想插入一个SQL的结果,就像我说的,类似这样:

EXEC('INSERT INTO table_name(第1行,第2行)从SQL_DB.SQL_table_name中选择r1,r2')在LINKEDSERVER上

我打赌我不能这样做,因为在这种语法中,我在MySql服务器中执行exec,而SQL表不存在。那么,如何在“EXEC()AT”语法中引用我的SQL表呢

谢谢。

您必须使用“OPENQUERY”来执行此操作-请参阅

您必须使用“OPENQUERY”来执行此操作-请参阅

您也可以使用此选项:

INSERT INTO [LinkedServer].Database.Schema.Table(Attributes)
From
Select (attributes) from Database.Schema.Table as TableAlias
您还可以使用以下选项:

INSERT INTO [LinkedServer].Database.Schema.Table(Attributes)
From
Select (attributes) from Database.Schema.Table as TableAlias

为什么需要在上使用EXEC()?为什么不插入LINKEDSERVER…表名选择。。。FROM…?>那么我如何在“EXEC()AT”中引用我的SQL表呢?简言之,您不能,EXEC执行的查询(带AT或不带AT)在不同的范围内运行(在您的例子中,这是在MySQL上),您不能从MySQL访问SQL Server中的表。您坚持使用OPENQUERY,或者您可以在MySQL服务器上生成INSERT INTO语句(使用字符串的动态查询)和exec,但是这应该是plan Z。SSIS包而不是链接服务器怎么样?谢谢您的回答。我告诉过你使用SISS,但我还没有试过,因为我在这个SQL server上没有这个模块。我试图通过LinkedServer使其工作。@AaronBertrand,我无法获取INSERT LinkedServer…tablename SELECT。。。从…起工作。到目前为止,我还无法在没有OPENQUERY或EXEC()的情况下引用LinkedServer。“无法工作”是什么意思?许多其他人将服务器从SQL Server链接到MySQL。无论如何,我同意Pred,如果根本问题是将大量数据从SQL Server移动到MySQL,我无论如何都会避免使用linked servers/EXEC AT/OPENQUERY。不要试图使用三轮车来做自卸卡车的工作。为什么需要在上使用EXEC()?为什么不插入LINKEDSERVER…表名选择。。。FROM…?>那么我如何在“EXEC()AT”中引用我的SQL表呢?简言之,您不能,EXEC执行的查询(带AT或不带AT)在不同的范围内运行(在您的例子中,这是在MySQL上),您不能从MySQL访问SQL Server中的表。您坚持使用OPENQUERY,或者您可以在MySQL服务器上生成INSERT INTO语句(使用字符串的动态查询)和exec,但是这应该是plan Z。SSIS包而不是链接服务器怎么样?谢谢您的回答。我告诉过你使用SISS,但我还没有试过,因为我在这个SQL server上没有这个模块。我试图通过LinkedServer使其工作。@AaronBertrand,我无法获取INSERT LinkedServer…tablename SELECT。。。从…起工作。到目前为止,我还无法在没有OPENQUERY或EXEC()的情况下引用LinkedServer。“无法工作”是什么意思?许多其他人将服务器从SQL Server链接到MySQL。无论如何,我同意Pred,如果根本问题是将大量数据从SQL Server移动到MySQL,我无论如何都会避免使用linked servers/EXEC AT/OPENQUERY。不要试图用三轮车做自卸卡车的工作。