ストアドプロシージャを実行し、その結果をデスティネーションデータベースのテーブルFinancialStatementIdsとして格納するSSISパッケージを作成しています。テーブルは既に宛先データベースに存在します。私は、宛先テーブルを分割し、それを行うためのスクリプトを書いている必要があります。日時フィールドの年基準に基づくパーティショニングテーブル
私は過去5年間の情報を取得しており、その年に基づいて各パーティションを保存しています。だから私はプライマリパーティションを除外する5つのパーティションを作成し、パーティションはdatetimeフィールドであるperiodanddateというカラムに設定されています。それが正しいことを確認してください。私はまた、スクリプトは、それがFinancialStatementIdsテーブルに
Destinatonテーブル
を分割する必要があることを知っているか知りたいのですが、私はパーティションテーブル内の他の列を追加する必要がありますか テーブルfinancialstatementIdsため
USE CoreReferenceStaging;
GO
-- Adds four new filegroups to the CoreReferenceStaging database
ALTER DATABASE CoreReferenceStaging
ADD FILEGROUP CT1;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILEGROUP CT2;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILEGROUP CT3;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILEGROUP CT4;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILEGROUP CT5;
-- Adds one file for each filegroup.
ALTER DATABASE CoreReferenceStaging
ADD FILE
(
NAME = ctdata1,
FILENAME = 'E:\MSSQL10_50.SQL2008R2\MSSQL\DATA\ctdata1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP CT1;
ALTER DATABASE CoreReferenceStaging
ADD FILE
(
NAME = ctdata2,
FILENAME = 'E:\MSSQL10_50.SQL2008R2\MSSQL\DATA\ctdata2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP CT2;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILE
(
NAME = ctdata3,
FILENAME = 'E:\MSSQL10_50.SQL2008R2\MSSQL\DATA\ctdata3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP CT3;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILE
(
NAME = ctdata4,
FILENAME = 'E:\MSSQL10_50.SQL2008R2\MSSQL\DATA\ctdata4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP CT4;
GO
ALTER DATABASE CoreReferenceStaging
ADD FILE
(
NAME = ctdata5,
FILENAME = 'E:\MSSQL10_50.SQL2008R2\MSSQL\DATA\ctdata5.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP CT5;
GO
-- Creates a partition function called financialStatementPartition that will partition a table into four partitions
CREATE PARTITION FUNCTION financialStatementPartition (datetime)
AS RANGE LEFT FOR VALUES (year(getDate()), year(getDate() -1), year(getDate() -2),year(getDate() -4)) ;
GO
-- Creates a partition scheme called financialStatementRange that applies financialStatementPartition to the five filegroups created above
CREATE PARTITION SCHEME financialStatementRange
AS PARTITION financialStatementPartition
TO (CT1, CT2, CT3, CT4,CT5) ;
GO
-- Creates a partitioned table called FinancialStatementPartition that uses financialStatementRange to partition periodenddate
CREATE TABLE FinancialStatementPartition (periodenddate datetime PRIMARY KEY)
ON financialStatementRange (periodenddate) ;
GO
DDL
CREATE TABLE [dbo].[FinancialStatementIds](
[financialCollectionId] [int] NOT NULL,
[companyId] [int] NOT NULL,
[dataItemId] [int] NOT NULL,
[dataItemName] [varchar](200) NULL,
[dataItemvalue] [decimal](18, 0) NULL,
[unittypevalue] [int] NULL,
[fiscalyear] [int] NULL,
[fiscalquarter] [int] NULL,
[periodenddate] [datetime] NULL,
[filingdate] [datetime] NULL,
[restatementtypename] [varchar](200) NULL,
[latestforfinancialperiodflag] [bit] NULL,
[latestfilingforinstanceflag] [bit] NULL,
[currencyconversionflag] [int] NULL,
[currencyname] [varchar](200) NULL,
[periodtypename] [varchar](200) NULL
) ON [PRIMARY]
私は少しあなたの答えと混同しています。あなたの答えにファイルグループ、ファイル、パーティションスキームの宣言はありません。私がパーティション分割に慣れていて、仮定に頼ることができないので、最終的な解決策が何を含んでいるのか教えてください。また、このテーブルにはインデックスがないことをご了承ください。年の基準に基づいてテーブルを分割する必要があります。それは本当にFinancialStatementIdsテーブルのインデックスを持つ必要がありますか? – Tom
@Tomでは、ファイルグループとファイルに変更は必要ありませんでした。空のパーティション関数とスキームスクリプトを追加し、ヒープを分割して既存のデータを保持する方法を追加しました。仮定を避けるために、テーブルDDLを質問に追加してください。すべてのテーブルにクラスタ化インデックスがあることをお勧めします。 –
Dan、financialstatementIdsテーブル – Tom