2017-07-31 115 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)