SSIS を使用して、SQL を含む CSV ファイルを転送します。
.NET を使用して CSV ファイルを作成し、それを SSIS パッケージを使用してテーブルに転送しています。
ファイルの内容は、36 文字の GUID と、タブ文字、パイプ文字、およびおそらく入力可能な文字を含む SQL テキストです。Windows CharMap アクセサリ ユーティリティを使用して独自の列と行の区切り記号を指定し、区切り記号として入力できない文字を選択しようと考えました。列と行の区切り文字としてそれぞれ ¼ と ½ を選択しました。
作成したテスト ファイルは次のようになります。
Guid¼Sql½3afc912b-917d-4719-8ded-22e5d95930a3¼SELECT
* FROM
TABLE½a867fa30-f2c7-459e-8985-9ef42616991e¼SELECT
* FROM
TABLE½
ファイル SSIS ファイル接続は、列を次のように定義します。
Guid: string [DT_STR] 36
Sql: text stream [DT_TEXT]
次の SQL Server ターゲット テーブルに転送しています。
CREATE TABLE [dbo].[CodeObjectSql](
[Guid] [char](36) NOT NULL,
[Sql] [varchar](max) NOT NULL
) ON [PRIMARY]
ファイルをプレビューすると、列区切り文字が GUID の最初の列の最後の (37 番目) 文字として表示され、行区切り文字が SQL 列値の最後の文字として表示されます。
これは私が得るエラーです:
Error: 0xC02020A1 at Load CodeObjectSql, CodeObjectSql File [1]: Data conversion failed. The data conversion for column "Guid" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
Error: 0xC020902A at Load CodeObjectSql, CodeObjectSql File [1]: The "output column "Guid" (10)" failed because truncation occurred, and the truncation row disposition on "output column "Guid" (10)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
Error: 0xC0202092 at Load CodeObjectSql, CodeObjectSql File [1]: An error occurred while processing file "C:\CodeObjectSql.csv" on data row 2.
Error: 0xC0047038 at Load CodeObjectSql, SSIS.Pipeline: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "CodeObjectSql File" (1) returned error code 0xC0202092. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
次に、ファイルを Unicode に変更しようとし、列の型を対応する Unicode に変更しました
Guid: string [DT_WSTR] 36
Sql: text stream [DT_NTEXT]
そしてまだ運がありません。
私の経験では、SSIS は、テキスト修飾子文字を使用し、データ内の 1 つの出現を表すときにテキスト値内の特殊文字を 2 倍にすることによって、データ内の行または列区切り文字の出現を処理できません。
私のテストに基づいて私の仮定がすべて正しい場合、このタイプのデータに使用するのに最適な形式は何ですか?
このテーブルを作成し、データを入力ファイルに貼り付けてみて、自分の目で確かめてください。:-)