Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 自动对具有月份和年份时间戳的表名执行SSIS查询_Sql Server_Date_Ssis_Sql Server 2016 - Fatal编程技术网

Sql server 自动对具有月份和年份时间戳的表名执行SSIS查询

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

我有一个数据库,其中一个表名与月份和年份编号关联,例如: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 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
    evaluatesExpression=true
    创建字符串变量SQLQuery,并为其定义以下表达式

    "SELECT o_key ,...,[repeated_hour],[value] FROM [data_values_" +  
    @[User::DateSuffix] + "] WHERE ... "
    
  • 指定变量SQLQuery作为数据源或SQL查询任务的源
你完了。

使用SQLQuery变量时,此变量表达式替换表达式的结果。表达式本身将DateSuffix字符串变量的内容注入查询文本

谢谢Vkarthik,解决方案很有帮助。:)请单击帮助您的答案旁边的复选标记来结束此问题。