これについては高低に検索されていますが、多くの提案がありますが、それは何も役に立ちません。我々は、テキスト型の列にSQLクエリを格納するフィールドを持つテーブルを持っており、その後、他のオブジェクトによってクエリが呼び出されるため、特定の文字をエスケープする必要があります。SSIS 2012はSQLの実行タスクの結果セットを切り捨てます
私はすばらしい作品を作成するためのSQLコードを作成しました。問題は、Execute SQLタスクを実行して結果をString変数に代入すると、テキストが一見無作為に切り捨てられます。最新の試行で4184文字が4058に切り捨てられました。
SSISではnvarcharが4000文字に制限されています。 1つの提案は、nvarchar(max)ソースデータ型とObject変数型を使用することでした。
"結果を型(DBTYPE_WSTR)の変数に抽出する際にエラーが発生しました"。
もう1つは、ソースクエリでntextを使用することでした。このエラーで失敗します:
"text、ntext、およびimageデータ型はローカル変数には無効です。"
何か不足していますか?長い文字列をExecute SQL結果セット変数に入れる正しい方法は何ですか?
ここでは、SQLコマンドを取得するための元のコードですが、機能するコードは切り詰められます。 IDはエスケープされた一重引用符をIDの周りに置きます。 (彼らは文字を含めることができるため、これらの特定のIDはVARCHARです。)
DECLARE @IDList VARCHAR(8000)
SELECT @IDList = COALESCE(@IDList + ', ', '') + '''''' + PersonID + ''''''
FROM tmpGroup
select '''SELECT SystemID
FROM People
WHERE PersonID IN (' + @IDList + ')''' AS GroupSQL
は、それが動作しているようにのみソース・データ・タイプだから、それはVARCHAR(8000)を使用します。
私はこのためにストアドプロシージャを使用する傾向があります。したがって、私のExecute SQLタスクは通常、ストアドプロシージャにパラメータを渡すだけです。 –
長さの問題を回避するためにこれらのアイデアを具体的に試してみませんでしたが、他の方法でも同様のテクニックを使用しました...とにかく、データフローを使用してDBから選択し、ODBC Recordset変数(オブジェクト)後でforeachループなどで再帰する必要があります。または、ソースからスクリプトコンポーネントに移動し、その値で文字列変数を設定します。データフローソースコンポーネントのテキスト入力ボックスにある8000文字の制限に遭遇するかどうかはわかりませんが、後でその変数を使用して後で使用するかどうかはわかりません。またはすぐに変数にスクリプトタスク... – Matt