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でのこの動作の原因が何であるかを知りたいです。誰かが手がかりを得ましたか?