2014-08-30 3 views
1

У меня есть 2 таблицы одного формата в 2 отдельных базах данных.Запретить выбор столбца, если он не существует

Database1

_________ _____________________ _______________ 
Code(int) Description(varchar) Class(varchar) 
_________ _____________________ ________________ 

database2

_________ _____________________ ___________ 
Code(int) Description(varchar) Type(int) 
_________ _____________________ ___________ 

Я хочу написать общий запрос для моего C# приложения, который извлекает значения из обеих баз данных. Я написал следующий запрос

DECLARE @DB = 'Database1' 

IF(@DB = 'Database1') 
BEGIN 

SELECT 
    ID,[Description],Class 
FROM MyTable 

END 

ELSE 
BEGIN 

SELECT 
    ID,[Description],Type 
FROM MyTable 

END 

Однако вышеупомянутый запрос выдает ошибку либо для столбцов Class или Type при запуске для Database2 или Database1 соответственно.

PS: Я правильно делаю соединения с БД, а также устанавливаю параметр @DB соответственно. Логика состоит в том, чтобы выполнить этот запрос дважды, один раз для Database1 и получить соответствующий MyTable с колонкой Class и второй раз для Database2 и получить соответствующий MyTable с колонкой Type.

Я хочу знать, насколько это возможно для достижения того, что я пытаюсь сделать. Спасибо заранее!

+0

Используйте порядковое: Выберите 1,2,3 FROM MyTable , Также см. Эту статью http://stackoverflow.com/questions/1037174/sql-use-statement-with-variable. Рассмотрим читаемость с помощью такого типа решений. – nshah

ответ

1

Это не будет работать, так как:

Весь запрос (партия) анализируется и компилируется. Если возникает ошибка на данном этапе запросы завершается с ошибкой компиляции

source

Вы можете попробовать динамический SQL:

IF @DB = 'Database1' 
BEGIN 
    execute sp_sqlexec 
    'SELECT ID,[Description],[Class] 
    FROM MyTable;'; 
END 
ELSE 
BEGIN 
    execute sp_sqlexec 
    'SELECT ID,[Description],[Type] 
    FROM MyTable;'; 
END 
0

использование сазе

SELECT 
     ID,[Description],CASE WHEN @DB = 'Database1' THEN Class ELSE Type END 
    FROM table 
+0

Это также вызовет ошибку при разборе. – SohamC

+0

convert (varchar, CASE WHEN @DB = 'Database1' THEN Class ELSE Type END) – Adi