我有两个数据库,一个是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名称和所有者,我仍然会得到同样的东西。
答案 0 :(得分:0)
我没有以这种方式使用链接服务器,但您是否可以使用链接的server.database.owner.procedure语法使用exec进行调用?
答案 1 :(得分:0)
我当时想要做类似的事情,所以即使这已经过时了,我想我会回复其他人搜索。 我找不到通过'...'表示法运行存储过程的方法,但这很好用
这是MySQL中的简单存储过程,用于更新数据库xxx测试表中记录的条形码字段,给出id:
DELIMITER $$
如果存在,则删除程序
xxx
。STP_products_Update_barcode
$$ CREATE DEFINER =root
@localhost
程序xxx
。STP_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
此处没有格式化代码,现在有点匆忙,但你明白了......