2009-08-19 236 views
0

我有兩個數據庫,一個MySQL 5,一個SQL Server 2000.我已經將MySQL數據庫映射爲MS SQL數據庫中的鏈接服務器。我想從MS SQL數據庫中調用保存在MySQL數據庫中的存儲過程。什麼是正確的語法來做到這一點?在SQL Server 2000中甚至可能嗎?如何從SQL Server 2000調用MySQL存儲過程?

編輯:

我已經試過

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] 

即使當我填寫數據庫名稱和所有者,我仍然得到一樣的東西。

回答

0

我正在尋找類似的東西,所以即使這是過時的方式,我想我會回覆其他人的搜索。 我找不到通過'...'表示法運行存儲過程的方法,但這種方式正常工作

這裏是MySQL中用於更新數據庫xxx測試表中記錄的條形碼字段的簡單存儲過程鑑於ID:

DELIMITER $$

DROP PROCEDURE IF EXISTS xxxSTP_products_Update_barcode $$ CREATE DEFINER = root @localhost PROCEDURE xxx。 (IN)(IN xid INT,in xbarcode varchar(25))BEGIN UPDATE test SET barcode = xbarcode
WHERE id = xid; END $$

DELIMITER;

,這是在SQL Server中運行它(我通常有嘗試catch塊和其他錯誤捕獲,但已經離開是出於對clarity.Note該MYSQL_XXX是從SQL設置鏈接服務器的程序服務器到MySQL:

CREATE PROCEDURE [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

還沒有把格式化代碼放在這裏的竅門和我有點此時正忙得不亦樂乎,但你的想法...

0

我沒有以這種方式使用鏈接的服務器,但是你能否使用鏈接的server.database.owner.procedure語法使用exec來調用?

相關問題