在sql server

时间:2018-03-20 15:13:20

标签: sql sql-server

我正试图翻转'作为ETL过程的一部分,将表分段到SQL Server中的prod表,但需要在处理外键时理清一些更精细的细节。我创建的ETL过程遵循以下模式:

  1. 截断舞台表
  2. 使用产品数据加载阶段表
  3. 在舞台表格中进行插入/更新
  4. 交换舞台和产品表
  5. 例如,我有4个表,2个prod和2个阶段。

    CREATE TABLE [Table_1]
    ( 
        [table_1_sk]         integer  NOT NULL ,
        [column_a]           varchar(20)  NULL ,
        [column_b]           varchar(20)  NULL ,
        [column_c]           varchar(20)  NULL ,
        PRIMARY KEY  CLUSTERED ([table_1_sk] ASC)
    )
    go
    CREATE TABLE [Table_2]
    ( 
        [table_2_sk]         integer  NOT NULL ,
        [table_1_sk]         integer  NOT NULL ,
        [column_d]           varchar(20)  NULL ,
        [column_e]           varchar(20)  NULL ,
        [column_f]           varchar(20)  NULL ,
        PRIMARY KEY  CLUSTERED ([table_2_sk] ASC),
         FOREIGN KEY ([table_1_sk]) REFERENCES [Table_1]([table_1_sk])
    )
    go
    CREATE TABLE [stage_Table_1]
    ( 
        [table_1_sk]         integer  NOT NULL ,
        [column_a]           varchar(20)  NULL ,
        [column_b]           varchar(20)  NULL ,
        [column_c]           varchar(20)  NULL ,
        PRIMARY KEY  CLUSTERED ([table_1_sk] ASC)
    )
    go
    CREATE TABLE [stage_Table_2]
    ( 
        [table_2_sk]         integer  NOT NULL ,
        [table_1_sk]         integer  NULL ,
        [column_d]           varchar(20)  NULL ,
        [column_e]           varchar(20)  NULL ,
        [column_f]           varchar(20)  NULL ,
        PRIMARY KEY  CLUSTERED ([table_2_sk] ASC)
    )
    go
    

    我开始使用sp_rename简单地重命名表,但注意到外键没有坚持使用prod表。

    有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

当我必须采用这种方法时,我会按照你所描述的那样准备好一切。假设我的实时表格为myTable,我计划切换的表格称为myTable_New。我会:

  1. 打开显式事务和错误阻止
  2. sp_rename myTable to myTable_Old
  3. sp_rename myTable_New to myTable
  4. 提交交易
  5. 此时,表已切换,登台表现已替换了实时表。您现在可以在闲暇时(即在您重新命名活动表时阻止期间之外)重命名并重命名要修复其名称的任何约束。另外一个:

    1. 将myTable_old或sp_rename myTable_Old上的所有约束删除为后缀" _Old"同样(这样他们在重命名时就不会与新表格的约束发生冲突)
    2. sp_rename myTable_Old上的所有约束,以删除" _Old"后缀