#mysql #sql #openquery #odbc-sql-server-driver
#mysql #sql #openquery #odbc-sql-server-driver
Вопрос:
У меня есть 2 базы данных, одна на MS SQL, а другая на Mysql. Я написал несколько сценариев sql, которые извлекают данные из Mysql и вставляют в MS SQL. Для этого я настроил подключение к драйверу устройства и связанному серверу на MS SQL, и эти скрипты выполняются на MS SQL. Скрипты просты и содержат только инструкции select. Теперь мне нужно написать динамические скрипты для извлечения данных из mysql на основе некоторых параметров. Ниже приведен пример запроса для получения данных из базы данных «stagedb_ie», где ie расшифровывается как Ирландия.
select * from openquery(stagedb_ie, 'select * from stagedb_ie.aol_center')
В mysql есть другие базы данных с суффиксом кода страны к stagedb в качестве имени. Теперь я хочу передать этот код страны в качестве параметра для запроса и получения данных. например
declare @stagedb_country varchar(20)
set @stagedb_country = 'stagedb_ie'
select * from openquery(@stagedb_country, 'select * from ' @stagedb_country '.aol_center')
Но этот запрос не работает. есть предложения?
Комментарии:
1. Неправильный синтаксис рядом с ‘@stagedb_country’.
2. Где отображается ошибка? у вас есть переменная в трех местах.
3. выберите запрос рядом с openquery(
Ответ №1:
declare @stagedb_country varchar(20),
@SQL nvarchar(max);
set @stagedb_country = 'stagedb_ie';
set @SQL = 'select * from openquery(' @stagedb_country
', ''select * from ' @stagedb_country '.aol_center'')';
exec (@SQL);
Имейте в виду, что динамический SQL в SPS выполняется с разрешениями вызывающего, а не владельца SP.
И последнее, я спрашиваю, почему вы используете для этого отдельные базы данных и таблицы. Вы не можете закодировать то, что вам нужно в данных, вместо того, чтобы помещать данные в разные контейнеры?
Комментарии:
1. На самом деле я не являюсь владельцем баз данных mysql, эти базы данных и таблицы там уже были.