2017-07-31 114 views
0

我有一個參數@year選擇從選擇哪個表,例如像:SQL查詢內嵌的if else語句

SELECT * FROM account2014 
or 
SELECT * FROM account2016 

我可以IF ELSE的SQL查詢裏面?像:

SELECT * FROM (IF @year = '2014' THEN account2014 ELSE IF @year = '2016' THEN account2016) 

我還測試

SELECT * FROM [email protected] 

但它不工作,我認爲它的輸出account'2014' ,我怎麼能解決這個問題?我接受其他方式的任何建議,請幫助

+0

使用動態SQL。 –

+0

糟糕的數據庫設計,從現在開始考慮20-30年之後,你將如何管理它? – user3712320

回答

0

試試這個..

if @year = '2014' 
begin 
    SELECT * FROM account2014 
end 
else if @year = '2016' 
begin 
    SELECT * FROM account2016 
end 
+0

謝謝,這個作品 – Hanzou

5

您可以使用union all

SELECT * 
FROM account2014 
WHERE @year = 2014 
UNION ALL 
SELECT * 
FROM account2016 
WHERE @year = 2016; 

作爲一個說明:你應該有一列來存儲所有的帳戶數據在一個單一的表year 。將相同的數據分解爲多個表通常是反模式。

+0

我有數百萬條記錄,這就是爲什麼我打破記錄到不同的一年,以更快的搜索速度 – Hanzou

+3

@Hanzou。 。 。這是一個非常糟糕的原因。數據庫旨在處理具有數百萬行的表格 - 甚至更多。 –

1

使用動態查詢

EXEC('SELECT * FROM account'[email protected]) 
+0

如果我有Where子句,該怎麼辦?它會是這樣嗎? EXEC('SELECT * FROM account'+ @ Year +'WHERE name like'%John%') – Hanzou

0

您可以使用Dynamic SQL

Declare @sql varchar(max), @year int 
set @year = 2014 --assign year that you want. 
set @sql = 'SELECT * FROM account'+ convert(varchar,@year) 
exec(@sql)