我有一个按照我的意愿工作的功能,但是我需要添加一个功能,但我还没有能够实现它。
这是一个已经有效的功能的大规模简化骨架:
create function IC
(
@A date
)
returns table
as
return
(
SELECT *
FROM db1.dbo.table a LEFT JOIN
db1.dbo.table2 b
on a.randomfield=b.randomfield
where datefield = @a
)
所以现在我可以使用此函数调用我想要的查询的日期特定版本。大!现在的问题是我希望随着时间的推移使这个变得有用。 datefield是一个存档日期,今年的数据与2015年的数据位于不同的数据库中,数据与2014年的数据库不同,等等。我希望函数查看@ a的年份,然后用它来确定哪个数据库为查询。我已经尝试了各种不起作用的东西,但似乎动态SQL是每个人都在互联网上得到的答案。
我想以某种方式使用if ... else语句,但未能将它们放在一起。有关如何进行的任何建议吗?
答案 0 :(得分:2)
使用四部分命名从正确的数据库中进行选择。
实施例
DECLARE @year INT = DATEPART(yyyy, GETDATE())
SELECT CASE @year
WHEN 2016 THEN
(SELECT 1 FROM ARCHIVE2016.dbo.SomeTable)
WHEN 2017 THEN
(SELECT 1 FROM ARCHIVE2017.dbo.SomeTable)
WHEN 2018 THEN
(SELECT 1 FROM ARCHIVE2018.dbo.SomeTable)
END
在将函数置于函数内以避免验证错误时,只需确保架构存在,即使它是空表也是如此。