2014-08-30 56 views
1

我有兩個相同的格式在2個獨立的數據庫中的表。防止選擇列,如果它不存在

數據庫1

_________ _____________________ _______________ 
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或當Database2Database1分別運行Type

PS:我正在與DB正確連接,並相應地設置參數@DB。邏輯是運行此查詢兩次,一次爲Database1,並分別取MyTable列爲Class列,第二次爲Database2並分別取MyTable列爲Type列。

我想知道它是以任何方式實現我想要做的。 在此先感謝!

+0

使用順序:選擇1,2,3 FROM MyTable的。另外,請參閱此文章http://stackoverflow.com/questions/1037174/sql-use-statement-with-variable。考慮這種解決方案的可讀性。 – nshah 2014-08-30 16:54:13

回答

1

這是行不通的,因爲:

將整個request(批)解析和編譯。如果在這個階段出現錯誤 ,請求與一個編譯錯誤

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

使用case語句

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

這也會在解析時引發錯誤。 – SohamC 2014-08-30 17:34:40

+0

convert(varchar,CASE WHEN @DB ='Database1'THEN Class ELSE Type END) – Adi 2014-08-30 17:56:17

相關問題