Sql server 自动对具有月份和年份时间戳的表名执行SSIS查询
我有一个数据库,其中一个表名与月份和年份编号关联,例如:7月份的datavalues_7_2017,8月份的datavalues_8_2017,等等。 我使用查询从表中检索某些值Sql server 自动对具有月份和年份时间戳的表名执行SSIS查询,sql-server,date,ssis,sql-server-2016,Sql Server,Date,Ssis,Sql Server 2016,我有一个数据库,其中一个表名与月份和年份编号关联,例如:7月份的datavalues_7_2017,8月份的datavalues_8_2017,等等。 我使用查询从表中检索某些值 SELECT o_key ,MIN(dateadd(hour, datediff(hour, 0, time), 0)) as on_time ,MAX(dateadd(hour, datediff(hour, 0, dateadd(hour, 1, time)), 0)) as off_time ,cast(time
SELECT o_key ,MIN(dateadd(hour, datediff(hour, 0, time), 0)) as on_time
,MAX(dateadd(hour, datediff(hour, 0, dateadd(hour, 1, time)), 0)) as off_time
,cast(time as date) as RDNG_DT ,[repeated_hour],[value]
FROM [data_values_8_2017]
WHERE value = 1 and o_key in (X,X,X,X...) and cast(time as date) = cast(getdate() as date)
GROUP BY o_key,cast(time as date),repeated_hour,value
我正在使用SSIS包,并使用此查询将结果加载到另一个表中。
现在,这个表datavalues_X_2017每个月都会更改,创建一个新表,我的SSIS查询应该指向新表。
有人能给我建议一种方法,让我可以自动化这个过程。您所需要做的就是创建一个存储过程作为包装器,并将一个日期参数传递给它,如下所示。将此过程作为源代码的一部分调用 如果不希望将其作为存储过程,请使用相同的逻辑,将sql作为变量,并在表达式中传递月份和年份变量
create procedure dbo.usp_GetData
(
@Date datetime = null
)
as
if @Date is null
set @Date = GETDATE()
declare @Month int
,@Year int
,@sql nvarchar(max)
select @Month = DATEPART(MONTH,@Date)
,@Year = DATEPART(YEAR,@Date)
set @sql ='
select o_key
,MIN(dateadd(hour, datediff(hour, 0, time), 0)) as on_time
,MAX(dateadd(hour, datediff(hour, 0, dateadd(hour, 1, time)), 0)) as off_time
,cast(time as date) as RDNG_DT
,[repeated_hour],[value]
from [data_values_'+CAST(@Month AS VARCHAR(2))+'_'+CAST(@Year AS VARCHAR(4))+']
where value = 1
and o_key in (
X,X,X,X...
)
and cast(time as date) = cast(getdate() as date)
group by o_key
,cast(time as date)
,repeated_hour
,value
';
exec sp_executesql @sql;
go
通过以下方式获取具有变量表达式的动态SQL:
- 创建一个字符串变量DateSuffux,该变量将填充您的datevalue,如
“7_2017”
- 使用properties
创建字符串变量SQLQuery,并为其定义以下表达式evaluatesExpression=true
"SELECT o_key ,...,[repeated_hour],[value] FROM [data_values_" + @[User::DateSuffix] + "] WHERE ... "
- 指定变量SQLQuery作为数据源或SQL查询任务的源
使用SQLQuery变量时,此变量表达式替换表达式的结果。表达式本身将DateSuffix字符串变量的内容注入查询文本 谢谢Vkarthik,解决方案很有帮助。:)请单击帮助您的答案旁边的复选标记来结束此问题。