0

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

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

4

2 回答 2

0

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

于 2009-08-19T21:47:01.193 回答
0

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

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

分隔符 $$

删除程序(如果存在 xxx)。STP_products_Update_barcode$$ CREATE DEFINER= root@ localhost PROCEDURE xxxSTP_products_Update_barcode(IN xid INT,in xbarcode varchar(25)) 开始更新测试集条形码 = xbarcode
WHERE 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

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

于 2009-12-22T00:56:05.853 回答