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

Posted

技术标签:

【中文标题】如何从 SQL Server 2000 调用 MySQL 存储过程?【英文标题】:How to call MySQL Stored Procedure from SQL Server 2000? 【发布时间】:2009-08-19 21:24:59 【问题描述】:

我有两个数据库,一个是 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]

即使我填写数据库名称和所有者,我仍然得到相同的东西。

【问题讨论】:

【参考方案1】:

我想做类似的事情,所以即使这已经过时了,我想我会为其他搜索的人发布回复。 我找不到通过“...”符号运行存储过程的方法,但这很好用

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

分隔符 $$

如果存在则删除程序 xxx.STP_products_Update_barcode$$ 创建定义器=root@localhost 程序 xxx.STP_products_Update_barcode(在 xid INT,in xbarcode varchar(25)) BEGIN 更新测试 SET 条码 = xbarcode 哪里 id = xid;结束$$

分隔符;

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

创建过程 [dbo].[STP_XXX_MySQLBarcode_Update]

@product_id int, @barcode varchar(20) AS BEGIN SET NOCOUNT ON DECLARE @SQL 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

这里没有格式化代码的窍门,现在有点匆忙,但你明白了......

【讨论】:

【参考方案2】:

我没有以这种方式使用过链接服务器,但你能不能只使用链接 server.database.owner.procedure 语法使用 exec 调用?

【讨论】:

以上是关于如何从 SQL Server 2000 调用 MySQL 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2000:如何退出存储过程?

sql server 中的自定义函数应该如何调用?

急:sql server 2000如何映射端口才能从外网访问?

如何从 TSQL 调用 Web 服务? (SQL 服务器 2000)

“模拟”用户未传播到 SQL Server 2000

如何查看SQL Server2000执行过的SQL语句