我正试图翻转'作为ETL过程的一部分,将表分段到SQL Server中的prod表,但需要在处理外键时理清一些更精细的细节。我创建的ETL过程遵循以下模式:
例如,我有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表。
有更好的方法吗?
答案 0 :(得分:0)
当我必须采用这种方法时,我会按照你所描述的那样准备好一切。假设我的实时表格为myTable
,我计划切换的表格称为myTable_New
。我会:
sp_rename
myTable to myTable_Old sp_rename
myTable_New to myTable 此时,表已切换,登台表现已替换了实时表。您现在可以在闲暇时(即在您重新命名活动表时阻止期间之外)重命名并重命名要修复其名称的任何约束。另外一个:
sp_rename
myTable_Old上的所有约束删除为后缀" _Old"同样(这样他们在重命名时就不会与新表格的约束发生冲突)sp_rename
myTable_Old上的所有约束,以删除" _Old"后缀