4

SSISのデータフロータスクを使用して、あるサーバー(SQL Server 2005)から別のサーバー(SQL Server 2008 R2)にデータを取得します。OLE DBソース接続では、SQLコマンドを使用してデータを取得します。このコマンドでは、すでにコンテンツを特定のデータ型としてキャストしています。

SELECT
CAST(column1 AS VARCHAR(10)) AS NameColumn1
,CAST(column2 AS INT) AS NameColumn2
,CAST(REPLACE(REPLACE(REPLACE(REPLACE(column3, CHAR(10), ''), CHAR(13), ''), CHAR(9), ''), ';', '-') AS VARCHAR(100)) AS NameColumn3
,CAST(REPLACE(REPLACE(REPLACE(REPLACE(column4, CHAR(10), ''), CHAR(13), ''), CHAR(9), ''), ';', '-') AS VARCHAR(255)) AS NameColumn4
...
FROM (etc.)

(キャストは、ソースデータベースの列値の元のデータ型にキャストされていることに注意してください。したがって、column1のデータ型は元々VARCHAR(10)、column4のデータ型は元々VARCHAR(255)などです。)

これらのキャストが使用されるのは、パッケージのさらに先で、次の警告が表示されたためcolumn3ですcolumn4

検証の警告。[...]8000の長さのデータフロー列「column4」から255の長さのデータベース列「column4」にデータを挿入するために切り捨てが発生する可能性があります。

ただし、column3とcolumn4の切り捨て警告が引き続き表示されるため、キャストが機能しないようです。( OLE DBソースの切り捨て警告を[失敗を無視する]に設定しましたが、違いはないようです。)

私はこれについてオンラインで何も見つけることができず、当面の間、列をとしてインポートすることによってこれを「解決」しますVARCHAR(8000)。しかし、SSISでのこの動作の原因が何であるかを知りたいです。誰かが手がかりを得ましたか?

4

1 に答える 1

4

ソースコンポーネントの高度なプロパティに移動し、3番目と4番目の列のサイズを確認します(入力プロパティと出力プロパティ内)。それらがすでにvarchar(8000)として計算されている場合は、手動で変更する必要があります。

または、コンポーネントを削除し、選択/キャストを最初から配置した新しいコンポーネントを追加します。これにより、適切なフィールド長が正しく割り当てられます。

于 2013-03-12T13:29:19.713 に答える