2009-08-19 4 views
0

У меня есть две базы данных, один MySQL 5, один SQL Server 2000. У меня есть база данных MySQL, сопоставленная как связанный сервер в базе данных MS SQL. Я хотел бы вызвать хранимую процедуру, сохраненную в базе данных MySQL из базы данных MS SQL. Какой правильный синтаксис для этого? Возможно ли это в SQL Server 2000?Как вызвать хранимую процедуру MySQL из SQL Server 2000?

Edit:

Я попытался

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

Я искал что-то похожее, поэтому, хотя это и устарело, я думал, что отправлю ответ для любого другого, кто ищет. Я не мог найти способ запуска хранимых процедур через нотацию «...», но это отлично работает

Здесь просто хранится proc в MySQL, чтобы обновить поле штрих-кода для записи в тестовой таблице базы данных xxx данный идентификатор:

DELIMITER $$

DROP PROCEDURE IF EXISTS xxx. STP_products_Update_barcode $$ CREATE DEFINER = root @localhost ПРОЦЕДУРА xxx. STP_products_Update_barcode (IN xid INT, в xbarcode varchar (25)) BEGIN UPDATE test SET barcode = xbarcode
WHERE id = xid; END $$

DELIMITER;

и это процедура, в SQL Server, чтобы запустить его (я обычно имею TRY CATCH блоки и другие отлова ошибок, но оставил это за clarity.Note что MYSQL_XXX является связанным сервером, который был создан из SQL Сервер для MySQL:

CREATE PROCEDURE [DBO] [STP_XXX_MySQLBarcode_Update]

@product_id INT, @barcode VARCHAR (20) КАК НАЧАТЬ КОМПЛЕКТ NOCOUNT пО ЗАЯВЛЯЮ @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

Я не использовал связанные серверы таким образом, но не можете ли вы просто позвонить с помощью exec с помощью связанного синтаксиса server.database.owner.procedure?

 Смежные вопросы

  • Нет связанных вопросов^_^