Динамический sql-запрос из MS SQL в MySQL

#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, эти базы данных и таблицы там уже были.