Как вызвать хранимую процедуру MySQL из SQL Server 2000? - PullRequest
0 голосов
/ 20 августа 2009

У меня есть две базы данных, одна MySQL 5, одна SQL Server 2000. У меня база данных MySQL сопоставлена ​​как связанный сервер в базе данных MS SQL. Я хотел бы вызвать хранимую процедуру, сохраненную в базе данных MySQL из базы данных MS SQL. Какой правильный синтаксис для этого? Это вообще возможно в 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]

Даже когда я заполняю имя и владельца БД, я все равно получаю одно и то же.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2009

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

Вот простой сохраненный процесс в MySQL для обновления поля штрих-кода для записи в тестовой таблице базы данных xxx с учетом идентификатора:

РАЗДЕЛИТЕЛЬ $$

ПРОЦЕДУРА КАДРА, ЕСЛИ СУЩЕСТВУЕТ xxx. STP_products_Update_barcode $$ CREATE DEFINER = root @ localhost ПРОЦЕДУРА xxx. STP_products_Update_barcode (В xid INT, в xbarcode varchar (25) НАЧАТЬ ОБНОВЛЕНИЕ теста SET barcode = xbarcode
ГДЕ id = xid; КОНЕЦ $$

РАЗДЕЛИТЕЛЬ;

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

СОЗДАНИЕ ПРОЦЕДУРЫ [DBO]. [STP_XXX_MySQLBarcode_Update]

@ product_id int, @barcode varchar (20) КАК НАЧАТЬ УСТАНАВЛИВАЕТСЯ ОБЪЯВЛЕНИЕ @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 голосов
/ 20 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...