2013-10-15 3 views
0

У меня есть хранимая процедура Microsoft, которая запрашивает две базы данных MySQL, используя OpenQuery. У двух баз данных MySQL должны быть одинаковые схемы, поэтому я могу выполнить один и тот же запрос для обоих.Запрос MySQL, в котором может отсутствовать столбец

Однако мы скоро изменим схемы MySQL и добавим столбец в таблицу. Но две базы данных MySQL не будут происходить одновременно, и я не знаю точной даты релизов.

Поэтому я хочу написать запрос, чтобы, если новый столбец существует, я использую его в своем выборе. Если нет, то я использую значение по умолчанию.

Возможно ли это? (То есть есть запрос, который обрабатывает различия в схеме таблицы?)

(Не следует путать с «coelesce», где поле определенно существует, но это просто нуль.)

ответ

0

Вы можете использовать следующие ВЫБРАТЬ заявление:

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'database name' AND TABLE_NAME = 'your table name' 
      AND COLUMN_NAME = 'the column name you want to check for' 

Если приведенное выше значение возвращает значение, то ваша колонка есть. Если нет, то запустите ваш альтернативный ЗЕЬЕСТ

Изменено заявление:

IF EXISTS (SELECT * 
      FROM OPENQUERY(servername, 'SELECT * 
             FROM information_schema.COLUMNS 
             WHERE TABLE_SCHEMA = ''database name'' 
              AND TABLE_NAME = ''your table name'' 
              AND COLUMN_NAME = ''the column name you want to check for'')) 
+0

спасибо. Теперь мне просто нужно найти, как сделать логику, исходя из того, возвращает ли она значение. Я думал о счете (*). В зависимости от 0 или 1. Или есть лучший способ? благодаря! – user2708232

+0

@ user2708232 Вы можете использовать инструкцию IF EXISTS в контексте SQL Server. Смотрите обновленный код выше –

+0

Спасибо! Я выясню это отсюда. :) – user2708232

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