原始问题:
我正在使用每月生成一个新表的数据库并附YYYY_MM加到新表名.我需要编写一个查询,查看当前月份的表格.抛开日期函数,我发现我无法构建表名!
示例表名称将是DOCUMENTS_2011_10.
我尝试使用这样的基本脚本,但它在语法问题上失败:
SELECT * FROM ('DOCUMENTS_'+'2011_10')
Run Code Online (Sandbox Code Playgroud)
有什么建议?
附加信息: 这些表由我们的企业门户应用程序(Oracle WebCenter Interaction)生成.重新设计此应用程序以更改其处理数据的方式是我无法控制的.
我被要求提取一份报告,显示每月生成的这些表中的关键数据.
我的方法是创建一个SQL Reporting Service订阅,每月以Excel格式通过电子邮件发送数据.
我需要有关此查询的帮助才能将其插入到报告服务中,因此我不必每个月都要使用查询来更改表名.
由于报告服务将每月触发并生成报告,因此不需要数据存档或任何类型的临时功能.
使用动态SQL我能够设置表名,不幸的是,当我尝试添加其余的查询时,它会抱怨字符限制问题.知道怎么解决这个问题吗?
这让我得到了正确的表:
Declare @tblName Varchar(400)
Declare @SQL Varchar(500)
Set @tblName =
'analyticsdbuser.ASFACT_DOCUMENTVIEWS_'
+ CONVERT(VARCHAR,DATEPART(yyyy,GETDATE()))
+ '_'
+ CONVERT(VARCHAR, RIGHT('0' + RTRIM(MONTH(GETDATE())-1), 2));
SET @SQL = 'SELECT * FROM ' + @Tblname;
Exec(@SQL)
Run Code Online (Sandbox Code Playgroud)
这是所有需要执行但不适合@SQL的其他查询:
SELECT t2.ID,
t2.USERID,
t3.NAME,
t2.DOCUMENTID,
t1.NAME AS DOC_NAME,
t4.PROPERTYID,
t5.NAME AS PROP_NAME,
t4.VALUE
FROM ASFACT_DOCUMENTVIEWS_2011_10 AS t2 INNER JOIN
ASDIM_USERS AS t3 ON t3.USERID …Run Code Online (Sandbox Code Playgroud) sql partitioning sql-server-2005 dynamic-sql sql-server-2008