3

@varchar(max)いくつかの変数を連結して、いくつかの異なるクエリに基づいて電子メールを作成するときに、大きな頭痛の種に遭遇しました。

効率のために、varchars1 つのvarchar.

これは、varchars8000文字を超えるまで機能しました。次に、それらすべてを 1 つに連結すると(これを のパラメーターにvarchar押し込むことができます)、"" が返され、LEN() でさえ実際の長さはわかりません。@bodymsdb.dbo.sp_send_dbmail

とにかく、ほぼ同じクエリを数回実行し、1 つのvarchar(max).

TL;DR

私は解決策に満足していません。varchar(max)これらの変数を互いに追加するにはどうすればよいでしょうか?

4

3 に答える 3

5

ここで役立つかもしれないし、そうでないかもしれない私が過去にヒットしたことの1つは、varchar(max)を連結するときに、SQLがどのデータ型で動作しているかを「忘れている」ようです。MAX を維持する代わりに、8000 文字程度での切り捨てを意味する、従来の varcharnitude に移行します。これを回避するには、次のトリックを使用します。

皮切りに

SET @MyMaxVarchar = @aVarcharMaxValue + @SomeString + @SomeOtherString + @etc

次のように修正します。

SET @MyMaxVarchar = cast(@aVarcharMaxValue as varchar(max)) + @SomeString + @SomeOtherString + @etc

繰り返しますが、これはあなたの特定の問題には役立たないかもしれませんが、それを覚えておくことで、将来の大きな頭痛の種から解放されるかもしれません.

于 2012-01-26T21:22:03.563 に答える
0

これはあなたのケースでは起こらなかったかもしれませんが、SQL Management Studio に埋め込まれた「落とし穴」があります: SQL Studio は結果グリッドに非常に多くの文字VARCHAR(MAX)しか出力しません。これをテストできます:

SELECT @MyLongVar, LEN(@MyLongVar)

返される実際のデータの長さ (ほとんどのテキスト エディターでこれを確認できます) が、変数に格納されているデータの長さより短い場合があります。

修正はツール | にあります。オプション | クエリ結果 | SQL サーバー | 結果をグリッドに; 取得する最大文字数を増やす | 非常に大きな数の非 XML データ。残念ながら、最大値は 65,535 であり、十分ではない可能性があります。

問題が SQL Studio での変数の値の出力に関係していない場合は、無視してください。

于 2015-02-25T23:29:58.457 に答える