小编use*_*584的帖子

如何在SQL查询的FROM区域中使用动态表名?

原始问题: 我正在使用每月生成一个新表的数据库并附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

2
推荐指数
1
解决办法
9503
查看次数