2012-06-09 47 views
0

我的表的结构都低于:阿尔特分区功能和分区架构自动

SalesCompanyFinancialPeriod (ID int, ...) 
Document (ID int, SalesCompanyFinancialPeriodID Int, ...) 
DocumentDetail (ID Int, DocumentID Int, ...) 

我想创建一个分区函数和分区架构分割Document表和DocumentDetail表,使用SalesCompanyFinancialPeriodID列值。 我还希望使用SalesCompanyFinancialPeriod表中的after触发器自动更改此分区架构和分区功能。

换句话说,我想在我的数据库自动创建一个文件组中创建一个新的salescompanyfinancialperiod记录时,并在这个新创建的文件组新salescompanyfinancialperiodid分区Document表和DocumentDetail表中的记录。

我该怎么做?

+0

您可能需要在dba.stackexchange.com中提出此问题,因为它可能会在此处获得更多帮助。 –

回答

1

http://sqlfascination.com/2010/09/12/interval-partitioning-in-sql-server-2008/,这确实几乎完全本(基于1台,却是同样的想法。)

他指出,根据MS,DML触发器不能直接这样做;在Books OnLine上引用:“...当对用作触发操作的目标的表或视图时,以下Transact-SQL语句不允许在DML触发器的主体内使用...,ALTER PARTITION FUNCTION,。 ..“

他说这是不真实的,但我会小心。相反,您可以创建一个存储过程来更改基于触发器运行的分区。这比较安全,因为语句需要作为数据库所有者运行,并具有数据空间权限,这可能会直接触发触发器。

备注 - 在SQL 2008中,没有列表分区,只有范围分区,所以即使是手动操作也很麻烦。您可以按以下方式欺骗它: http://www.sqlservercentral.com/articles/partition/64740/