如何从SQL Server 2000调用MySQL存储过程?

时间:2009-08-19 21:24:59

标签: mysql stored-procedures sql-server-2000 rpc

我有两个数据库,一个是MySQL 5,一个是SQL Server 2000.我已经将MySQL数据库映射为MS SQL数据库中的链接服务器。我想从MS SQL数据库中调用保存在MySQL数据库中的存储过程。这样做的正确语法是什么?它甚至可以在SQL Server 2000中使用吗?

修改

我试过

EXEC webpush...clear_tables

但我刚刚回来了:

Could not execute procedure 'clear_tables' on remote server 'webpush'.
[OLE/DB provider returned message: [MySQL][ODBC 3.51 Driver]
[mysqld-5.0.46-enterprise-gpl-log]You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the 
right syntax to use near '?=call "clear_tables";1' at line 1]

即使我填写了DB名称和所有者,我仍然会得到同样的东西。

2 个答案:

答案 0 :(得分:0)

我没有以这种方式使用链接服务器,但您是否可以使用链接的server.database.owner.procedure语法使用exec进行调用?

答案 1 :(得分:0)

我当时想要做类似的事情,所以即使这已经过时了,我想我会回复其他人搜索。 我找不到通过'...'表示法运行存储过程的方法,但这很好用

这是MySQL中的简单存储过程,用于更新数据库xxx测试表中记录的条形码字段,给出id:

  

DELIMITER $$

     

如果存在,则删除程序   xxxSTP_products_Update_barcode $$   CREATE DEFINER = root @ localhost   程序   xxxSTP_products_Update_barcode(IN   xid INT,在xbarcode varchar(25)中)BEGIN   UPDATE测试SET条形码= xbarcode
  WHERE id = xid;结束$$

     

DELIMITER;

这是SQL Server中运行它的过程(我通常有TRY CATCH块和其他错误捕获,但为了清楚起见已经将其留下了。注意MYSQL_XXX是从SQL Server到MySQL设置的链接服务器:

  

创建程序   [DBO]。[STP_XXX_MySQLBarcode_Update]

     

@product_id int,@ barcode varchar(20)   在DECLARE @SQL上开始设置NOCOUNT   为nvarchar(1000)

     

SET @SQL = 'CALL STP_products_Update_barcode(' + CAST(@Product_id as varchar) + ','''+ @barcode +''')' EXEC (@SQL) AT MYSQL_XXX SET NOCOUNT OFF END GO

此处没有格式化代码,现在有点匆忙,但你明白了......