2011-10-18 2 views
0

抽出するデータを指定するためにSQLを使用して「不規則な形の」(固定)形式のファイルを作成しています。抽出された数値の不揃いなファイル列内の値を右揃え

SELECT 
    'D'                AS DTL_REC_TYP 
    ,CAST(CONVERT(VARCHAR, dbo.GetCycleDate(), 120) AS CHAR(10)) AS DTL_FILE_GL_DT 
    ,CAST(CONVERT(VARCHAR, GETDATE(), 120) AS CHAR(19))    AS DTL_FILE_CREATE_DT 
    ,LEGAL_ENTTY_CD             AS DTL_LEGAL_ENTITY 
    ,CLIENT_ID              AS DTL_CLIENT_ID 
    ,ACCT_NUM              AS DTL_ACCT_NUM 
    ,BEN_OPT_CD              AS DTL_BEN_OPT_CD 
FROM 
    MyTable 

Client_IDは、データベースのINT列です。

Q:値を列内で右寄せにするにはどうすればよいですか?

私はこれを行うには、私のSQLを変更検討していたが、これは醜いようだ:

,RIGHT('000000000' + CAST(CLIENT_ID As varchar(9)),9)   AS DTL_CLIENT_ID 

または

,RIGHT('   ' + CAST(CLIENT_ID As varchar(9)),9)   AS DTL_CLIENT_ID 

は、SSISの代わりにそれをを行うには良い方法はありますT- SQL。そうでない場合は、T-SQLではやや良い方法がありますか?固定フラットファイルの形式は、少なくともSSISとそのSQLで定義されている必要があります。 SQLで書式設定を行う

enter image description here

答えて

1

醜いですが、それは作業を行います。

データフロータスクのスクリプトコンポーネントで書式設定を行うことをお勧めします。これは、主にString.FormatがT-SQLのそれよりもはるかに強力であるためです。この場合、スクリプトは選択したDBデータソースとフラットファイルの出力先の間を移動します。

enter image description here

あなたはこのような何かにクエリを変更したい:あなたは、もはやSQLで数値を変換しようとしている

SELECT 
    'D'     AS DTL_REC_TYP 
    ,dbo.GetCycleDate() AS FILE_GL_DT 
    ,GETDATE()   AS FILE_CREATE_DT 
    ,LEGAL_ENTTY_CD  AS DTL_LEGAL_ENTITY 
    ,CLIENT_ID 
    ,ACCT_NUM   AS DTL_ACCT_NUM 
    ,BEN_OPT_CD   AS DTL_BEN_OPT_CD 
FROM 
    MyTable 

。クエリのすべての列は、スクリプトコンポーネントの入力列になります。書式設定する列ごとに、データ型DT_WSTRと適切な幅の出力コンポーネントをスクリプトコンポーネントに追加します。スクリプトコンポーネント自体では、あなただけのProcessInputRowイベントにコードを追加する必要があります。

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    Row.DTL_CLIENT_ID = String.Format("{0:000000000}", Row.CLIENT_ID); 
    // Do similar formatting for dates, money, whatever 
} 

その後、あなたのフラットファイル先は単なる文字列を出力列を消費します。

+0

これは、私が一般的に考えていたラインに沿っています。私はそれを試してみます。 – ChadD