残念ながら、これはSQLServerでの文字列連結の信頼性の低い方法です。最も些細な場合を除いて、私はそれを避けます。このKBには、さらにいくつかの情報があります。実行プランと集計連結クエリの結果は式の場所 。
そうは言っても、私はあなたの問題を再現し、私の環境で回避策を提供することができました:
SET @val = ''
SELECT @val = @val + 'Hello, my name is ' + replace([name], '', '') + '!' + CHAR(10) + CHAR(13)
FROM LINKED.A.sys.tables
式に空の置換関数を追加したことに注意してください。出力には何もしませんが、ローカルを追加します。 クエリプランへの「スカラーの計算」ステップ。これは、リモートクエリに必要と思われるものを返すだけでなく、名前列からすべてのデータをプルバックしてローカルで処理するようです。
交換
空の引数で。おそらく二重のreverse
か何か。ドキュメントに記載されているように、必要に応じて必ず最大データ型にキャストしてください。
更新
@var
を宣言するだけです varchar(max)
として nvarchar(max)
ではなく 置換関数と同じように、名前列全体(sysname-またはnvarchar(128)-と私は信じています)をローカル処理に戻すため、問題が解決します。 リンクされたサーバー設定
のどの組み合わせかわからないふりをすることができません。 暗黙のキャストにより、これが発生します。うまくいけば、この分野の知識が豊富な人がチャイムインできます!