2011-07-26 29 views
9

VARCHAR(MAX)型のパラメータを受け入れるSQLストアドプロシージャがあります。 私の知る限りでは、私は読んすべてによると、このような文字列の最大サイズは2GBです: MSDN文字列またはバイナリデータが切り捨てられるSQLエラー

何らかの理由で8キロバイトを超える文字列を渡すときに私が取得:

文字列かバイナリデータは切り捨てられます。

なぜこのエラーメッセージが表示され、解決できますか?

+1

あなたがストアドプロシージャを投稿し、コード –

+0

を呼び出します示唆しますあなたはprocの残りの部分を投稿することができますか?そのパラメータとは無関係かもしれません。 – SteveCav

+0

実際には、この文書は明確ではありません。あなたが "max"と書くのを除いて、限界は8kだと思われます...しかし、oracle dbmsを使って知っているのは、varcharが4kに制限されていることです。私は間違っているかもしれませんが、私は慎重にチェックしていませんし、私は巨大なデータのためにclob/blobを好むでしょう – ShinTakezou

答えて

8

BoL(あなたが指定したリンク)によれば、解釈に違いがあります。 クエリ(n個の部分)で使用できる最大量は8000です。ストレージのために、varchar(max)はディスク上で2GBを処理できます。

これは、クエリと格納のためのデータ型の解釈に過ぎません。結論では、クエリでは8000文字しか使用できません。

8

この問題を回避するために、あなたはvarchar(max)に最初に文字列をキャストする必要があります。

column = cast(other_column as varchar(max)) 

このようmaxよりも長い任意の文字列は、(8000または4000、バージョンによって異なります)最大の長さに切り捨てられます。

1

文字列をより大きいをデータベースの列よりも右に渡していますか? 列のサイズを大きくしてみてください。

1

文字列より大きい文字列をデータベースに渡しています。データベーステーブルのよう

は以下の通りです:

EXECUTIVE varchar(15) 

しかし、あなたの挿入文字列(vb.net中)のように:

cmd.Parameters.Add("@EXECUTIVE", Data.SqlDbType.VarChar, 150).Value = CmbExecutive.Text.ToString() 
関連する問題