如何从 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如何映射端口才能从外网访问?