2016-10-03 42 views
2

我有一个夜间运行的大规模作业,并且对数据库具有较小的影响,它在不常用的不同架构(EmptySchema)中的表上运行,然后交换到常用位置( UsualSchema)使用使用ALTER SCHEMA传输表时,索引会发生什么变化?

ALTER SCHEMA TempSchema TRANSFER UsualSchema.BigTable 
ALTER SCHEMA UsualSchema TRANSFER EmptySchema.BigTable 
ALTER SCHEMA EmptySchema TRANSFER TempSchema.BigTable 

哪个有效地互换这两个表。

但是,我需要在UsualSchema表上设置索引。我可以在UsualSchema表上禁用它们,然后在交换发生后重新启用它们吗?或者我每次都必须在换出的桌子上创建它们?或者在两个地方都有重复的索引,并根据需要禁用/启用它们(导致源代码管理中出现重复,因此不理想)?有没有更好的方法来做到这一点?

有一个聚簇索引和五个非聚簇索引。

谢谢。

+0

SQL Server或Sybase? – jarlh

+0

我正在使用SQL Server –

+0

在此处阅读:http://dba-presents.com/index.php/databases/sql-server/44-changing-a-schema-of-an-object-in-sql-服务器似乎像这些指标隐含在移动中,并保持不变。即使外键也被保留下来,因为它们可以从模式A中的表格指向模式B中的表格......可惜MSDN文档完全没有提到这个 – dlatikay

回答

0

索引(包括那些支持约束的索引)由ALTER SCHEMA传输,因此您可以在源和目标对象模式中都包含它们。

约束名称是基于表架构的架构范围,其他索引名称是由表/视图本身限定的。因此,可能在同一个模式中具有相同的索引名称,但在不同的表上。模式中的约束名称必须是唯一的。

相关问题