Mysql 在[链接服务器]上使用EXEC()从本地服务器插入数据
让我先解释一下我的设置,然后再告诉您我正在处理的问题: 我有两个数据库服务器: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”来执行此操作-请参阅 您也可以使用此选项: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') 但是我还没有找到通过这个
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。不要试图用三轮车做自卸卡车的工作。