我正在尝试构建一个用于水晶报表的视图,以便我们查找GL代码。不幸的是,我们的ERP每年都会创建一个新的SQL表,并将最后两位数字附加到表名上。
除非我能找到一种方法来根据日期更改它所查看的表格,否则每年我需要为我创建的每个视图手动更改视图。有什么建议吗?
This Year: select * from GL000016
Next Year: select * from GL000017
答案 0 :(得分:2)
这是MSSQL版本:
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @TableName AS NVARCHAR(100)
SET @TableName = 'GL0000' + RIGHT(CONVERT(CHAR(4), GETDATE(), 120),2)
SET @SQLQuery = 'SELECT * FROM ' + @TableName
EXECUTE sp_executesql @SQLQuery
您还可以根据环境使用存储过程。 @Tablename将保留表名,如果这就是你需要的(即SELECT @Tablename)。
答案 1 :(得分:0)
您可以使用T-SQL Year函数。
返回表示指定日期年份的整数。
https://msdn.microsoft.com/en-us/library/ms186313.aspx
所以对于今年,以下将返回17。
select (YEAR(GETDATE()) % 100) + 1
答案 2 :(得分:0)
不完全可以为Views
动态切换表如果要切换要选择的表,则需要使用IF语句或执行Dynamic sql。考虑到您想在视图中执行此操作,您无法使用这两者。所以从我的角度来看,你的选择是:
如果你必须使用一个视图,那么3可能是你的选择,但它带来了维护和切换开销。从事该项目的下一个人可能想知道为什么他们的视图更改会被覆盖。
答案 3 :(得分:0)
创建一个与GL0000XX表的通用结构相匹配的临时表。
然后,您必须使用动态SQL来查询表。
CREATE TABLE #GL ....;
DECLARE @year char(2) = YEAR(GETDATE()) % 100;
INSERT INTO #GL
EXEC('SELECT * FROM GL0000' + @year);