2016-10-06 12 views
0

誰も私を正しい方向に導くことができます。私は冗談のように見えるものの複数の行で大きなテキストファイルを受け取ります。例えば、ここではラインの一つである:ケースブランク複数の条件

DETDD20160100388530007400000015768652700000000074433902  00000162667905028000000200020160229011750490157  1606056379591109995050     435601530A   H19618010000000000{0000013962{0000013962{000000201601D142 

今私の仕事は、このの意味を理解し、最終的にはExcelのスプレッドシートにそれを置くために、ストアドプロシージャを呼び出すSSISパッケージを使用することです。これらの長い行は、最終的な出力を決定するために使用する5文字で始まります。私はどの文字が各列のデータを構成するかを教えてくれるガイドがありますが、コードには助けが必要です。ここに私がこれまでに得たものがあります。

Select * 
insert into [dbo].[ContractDisputeResolution] 
Case WHEN SUBSTRING(col001, 1,5) = 'DETDD' 
    THEN (SUBSTRING(col001, 6,6) as Current_Reporting_Period, 
      SUBSTRING(col001, 12,7) as Sequence_Number, 
      SUBSTRING(col001, 19,8) as DDPS_System_Date, 
      SUBSTRING(col001, 27,32) as DDPS_System_Time, 
      SUBSTRING(col001, 33,37) as File_ID_, 
      SUBSTRING(col001, 38,42) as Sub_Contract_No, 
      SUBSTRING(col001, 43-250) as Filler) 
END 
FROM [dbo].[ContractDisputeResolutionSTAGING] 

---------------------------------------------------------- 

Select * 
insert into [dbo].[ContractDisputeResolution] 
Case WHEN SUBSTRING(col001, 1,5) = 'TAMPT' 
(insert more rules here) 

私は、構文エラーのすべての種類を取得していますし、私もCaseステートメントを使用してすべきかどうか分かりません。誰かがこれを少し上手くやって、正しい方向に向けるのを助けることができますか?

おかげで、 グレッグ

+0

SSISソートとは、SQL Serverを意味し、その構文はさらにそれを確認します。 –

答えて

2

は、これは有効なSQLではありません。

Select * 
insert into [dbo].[ContractDisputeResolution] 

単にSelect *を削除します。 insertの列を一覧表示することをお勧めします。

そして、caseも間違っています。私はあなたが意図し考える:

insert into [dbo].[ContractDisputeResolution](Current_Reporting_Period, Sequence_Number, DDPS_System_Date, DDPS_System_Time, DDPS_System_Time, Sub_Contract_No, Filler) 
    select SUBSTRING(col001, 6, 6) as Current_Reporting_Period, 
      SUBSTRING(col001, 12, 7) as Sequence_Number, 
      SUBSTRING(col001, 19, 8) as DDPS_System_Date, 
      SUBSTRING(col001, 27, 32) as DDPS_System_Time, 
      SUBSTRING(col001, 33, 37) as DDPS_System_Time, 
      SUBSTRING(col001, 38, 42) as Sub_Contract_No, 
      SUBSTRING(col001, 43, 250) as Filler 
    FROM [dbo].[ContractDisputeResolutionSTAGING] 
    WHERE SUBSTRING(col001, 1, 5) = 'DETDD'; 

私は列名が列の別名に基づいて、実際のテーブルにあるかを推測しています。