如何根据周动态创建表名

时间:2014-10-28 10:39:26

标签: sql-server ssis

我正在尝试创建一个名为pipelinebackupWk##的备份表,其中##表示从财务日历表中查找的当前周。例如:本周备份表将被称为pipelinebackup10,下周它将被称为pipelinebackup12。我需要几个星期来自动更改,以便我的SSIS包运行,而不必每周手动更改它。

我目前正在使用这个:

select * into (
    select 'Pipelinebackup'+'WK'+ RIGHT(CAST(WEEK_OF_QUARTER AS VARCHAR(2)),2) 
    From [dbo].[Fiscal_calendar] 
    Where ACTUAL_DATE = Convert(Datetime, Convert( nvarchar(20), getdate()-5,101)) 
) 
from table12

2 个答案:

答案 0 :(得分:0)

您可以使用存储过程创建表。在那里你动态编写create table字符串并执行它。如果你留在一个DB中,可能没有必要使用double exec(sp_execute)。这样的东西适合我,创建动态表:

create proc [make_new_tab]
as begin 
  declare @wk as NVARCHAR(2);
  declare @SQL as NVARCHAR(MAX);
  select @wk = CAST(WEEK_OF_QUARTER AS NVARCHAR(2)) from  
    [dbo].[Fiscal_calendar] 
       Where ACTUAL_DATE =  (
                 select Convert( Datetime, Convert( nvarchar(20), getdate()-5,101)))
                 from table12)
  set @SQL = N'exec YOUR_DB..sp_executesql N''CREATE TABLE PipelinebackupKW'+ @wk + ' (Col1 INT NOT NULL, Col2 INT NOT NUL) ON PRIMARY ''
EXEC(@SQL)
end

答案 1 :(得分:0)

如果您想在SSIS中创建表格,可以:

  1. 使用执行SQL任务在财务年度表查询中运行查找周数,将结果存储在变量中(称为 WeekNumber )。

  2. 使用表达式任务构建存储在另一个变量中的CREATE TABLE语句。此表达式应引用您需要插入周数的@ [User :: WeekNumber]变量。例如:@[User::CreateTableQuery] = "CREATE TABLE pipelinebackupWk" + @[User::WeekNumber] + " (c1 int PRIMARY KEY, ....."

  3. 使用第二个执行SQL任务来运行 create table query 变量中定义的查询。