0

我的表格结构如下:

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

我想创建一个分区函数和分区模式,用于使用列值对Document表和表进行分区。我还想使用表上的后触发器自动更改此分区架构和分区函数。DocumentDetailSalesCompanyFinancialPeriodIDSalesCompanyFinancialPeriod

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

我怎样才能做到这一点?

4

1 回答 1

1

请参阅http://sqlfascination.com/2010/09/12/interval-partitioning-in-sql-server-2008/,它几乎完全做到了这一点(基于 1 个表,但它是相同的想法。)

他指出,根据 MS 的说法,DML 触发器不能直接执行此操作。引用 Books OnLine:“......当 DML 触发器用于作为触发操作的目标的表或视图时,不允许在 DML 触发器的主体内使用以下 Transact-SQL 语句......, ALTER PARTITION FUNCTION, . ..”

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

旁注 - 在 SQL 2008 中,没有列表分区,只有范围分区,所以即使手动这样做也会很烦人。您可以根据以下内容欺骗它: http ://www.sqlservercentral.com/articles/partition/64740/

于 2012-06-11T18:27:14.973 回答