0

私のテーブルの構造は以下の通りです:

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

列の値を使用して、Documentテーブルとテーブルをパーティション分割するためのパーティション関数とパーティション スキーマを作成したいと考えています。また、テーブルの after トリガーを使用して、このパーティション スキーマとパーティション関数を自動的に変更したいと考えています。DocumentDetailSalesCompanyFinancialPeriodIDSalesCompanyFinancialPeriod

つまり、新しいレコードが作成されたときにデータベースにファイル グループを自動的に作成し、この新しく作成されたファイル グループで、テーブルとテーブルsalescompanyfinancialperiodのレコードを new でパーティション分割したいと考えています。DocumentDocumentDetailsalescompanyfinancialperiodid

これどうやってするの?

4

1 に答える 1

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/

于 2012-06-11T18:27:14.973 に答える