0

[Body] というテーブルに nvarchar(MAX) フィールドがあります。そのフィールドを(かなり)長い文字列に設定しようとしています。文字列が 42531 文字を超える場合、update ステートメントが実行され、他のフィールドが更新されますが、[Body] フィールドは空の文字列に設定されることがわかりました。文字列の任意の場所から 1 文字を削除すると、[Body] フィールドに設定したテキストが含まれます。追加/削除する文字もその位置もこれに影響しません。奇妙な文字やエスケープの問題ではありません。

DECLARE @p1 nvarchar(MAX)
SET @p1 = 'a string longer 
than 42531 chars...
with line breaks etc'
UPDATE [dbo].[MyTable] SET [Body] = @p1, CreatedOn = GETDATE() WHERE Id = 15597

どうすればいいの?!nvarchar(MAX) が最大 2GB のデータを保存できることは明らかですが、私はそれに近づくことはできません。

4

1 に答える 1

0

うーん、これは本当に奇妙です。おそらく、これは Management Studio の問題です。このスクリーンショットでわかるように、SSMS では、一部のレコードでフィールドが空に見えます。ただし、「空の」フィールドにカーソルを置き、CTRL-Cを押して値を別の場所にコピーできることを発見しました。データは実際にはそこにあり、SSMSはそれを表示していませ! フィールドにカーソルを置いても、データが視覚的に表示されず、フィールドが空であるかのように動作します。ただし、CTRL-C はデータを取得します!

これは SSMS 2012 の新機能かもしれません。これは前に見たことがありません。

SSMS の「各列に表示される最大文字数」の設定が 256 に設定されていることは承知しています。 42532 文字) はデータが存在することを示しており、これらのフィールドにカーソルを置くと、SSMS はテキスト文字列の最後に移動し、F2 を押して、256 文字だけでなく、文字列全体でカーソルを移動できます。ただし、42531文字を超える場合、フィールドには何も表示されません...

とにかく、少なくとも私は今、データがそこにあることを知っています!

于 2013-11-06T09:08:29.620 に答える