【发布时间】:2010-12-04 22:22:39
【问题描述】:
我在尝试使用 OPENQUERY 语法通过链接服务器 (SQL Server 2005) 调用带有参数的 MySQL (5.0.77) 存储过程时遇到问题。
MySQL 存储过程返回一个结果集,当我使用 'EXEC ... AT ...' 语法时,调用工作正常,例如...
EXEC('CALL my_stored_proc(''2009-10-07'',''2009-10-07'');') AT MySQLSERVER;
使用“EXEC ... AT ...”的限制意味着我无法将结果集插入到 SQL Server 中的临时表中,这最终是我想要做的。这导致我尝试使用 OPENQUERY 语法...
SELECT * FROM OPENQUERY(MySQLSERVER,'CALL my_stored_proc(''2009-10-07'',''2009-10-07'');')
...但这失败了,然后返回...
Msg 7357, Level 16, State 2, Line 1
Cannot process the object "CALL my_stored_proc(''2009-10-07'',''2009-10-07'');". The OLE DB provider "MSDASQL" for linked server "MySQLSERVER" indicates that either the object has no columns or the current user does not have permissions on that object.
这很奇怪,因为“EXEC ... AT ...”调用没有抱怨权限。以下调用都可以正常工作...
EXEC('SHOW TABLES;') AT MySQLSERVER;
SELECT * FROM OPENQUERY(MySQLSERVER,'SHOW TABLES;');
CREATE TABLE #tmpTest (
[table] varchar(255) null
);
INSERT INTO #tmpTest ([table])
SELECT * FROM OPENQUERY(MySQLSERVER,'SHOW TABLES;');
SELECT * FROM #tmpTest;
DROP TABLE #tmpTest;
所以我的问题是,如何通过链接服务器调用 MySQL 存储过程,并将结果集存储在 SQL Server 的临时表中?通过使用“EXEC ... AT ...”语法,或者在使用 OPENQUERY 语法时解决对象/权限错误。
任何帮助将不胜感激!
【问题讨论】:
标签: mysql sql-server stored-procedures linked-list