我的表格结构如下:
SalesCompanyFinancialPeriod (ID int, ...)
Document (ID int, SalesCompanyFinancialPeriodID Int, ...)
DocumentDetail (ID Int, DocumentID Int, ...)
我想使用Document
列值创建分区函数和分区模式,以便对DocumentDetail
表和SalesCompanyFinancialPeriodID
表进行分区。
我还想使用SalesCompanyFinancialPeriod
表上的后触发器自动更改此分区架构和分区功能。
换句话说,我想在创建新的salescompanyfinancialperiod
记录时自动在我的数据库中创建一个文件组,并用新的Document
表和DocumentDetail
表的记录进行分区这个新创建的文件组中的salescompanyfinancialperiodid
。
我该怎么做?
答案 0 :(得分:1)
请参阅http://sqlfascination.com/2010/09/12/interval-partitioning-in-sql-server-2008/,它几乎完全相同(基于1表,但它的想法相同。)
他指出,根据MS,DML触发器无法直接执行此操作;引用Books OnLine:“......当对作为触发动作的目标的表或视图使用时,DML触发器的主体内部不允许使用以下Transact-SQL语句...,ALTER PARTITION FUNCTION ,. ..“
他说这是不真实的,但我会小心。相反,您可以创建一个存储过程来更改基于触发器运行的分区。这有点更安全,因为语句需要作为数据库所有者运行并具有数据空间权限,这可能是直接触发器中可怕的。
附注 - 在SQL 2008中,没有列表分区,只有范围分区,因此即使手动也会烦人。您可以按照以下方式欺骗它: http://www.sqlservercentral.com/articles/partition/64740/