パラメーター宣言のvarchar(MAX)にはどのサイズを使用しますか?


190

通常、ADO.NETでパラメーターを作成するときに列サイズを設定します

しかし、列がどのようなサイズの場合、どのサイズを使用しますVARCHAR(MAX)

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

回答:


288

この場合は-1を使用します。


5
すべてのパラメーター長を-1に設定することにはパフォーマンス上の欠点があるので、dbマッチングリストを維持する必要はありませんか?
Andrew Bullock 14

1
Varchar(max)は、8000バイト未満の値の場合、varchar(8000)と同じように扱われます。大きな値の場合、フィールドは「テキスト」フィールド(別名「CLOB」)として扱われます。データは追加のルックアップを必要とする「行外」に格納されるため、これはクエリプランの最適化と、この列に大きな値を持つ行を取得する効率に影響を与える可能性があります。
KeithS 2015年

SQLでnvarchar(max)を使用し、C#でSqlDbType.NVarcharを使用して長さ-1を定義します
Kumar Jain

以下のSam Mesheshaの答えがなければ、答えを見逃していたでしょう。コードとしてフォーマットされたコードのサンプル行を挿入すると、回答の投票数が増える可能性があります。
qxotk

51

Michal Chaniewskiによって-1が表示されなかった私たちの場合、コードの完全な行:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

SqlDbType.VarCharの最大サイズは2147483647です。

SQLの代わりに汎用のoledb接続を使用する場合、LongVarCharデータ型もあることがわかりまし。最大サイズは2147483647です。

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

サイズパラメータを渡す必要はありませんVarchar。次のように、それがMAXであることをすでに理解していることを宣言します。

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
これは、実行計画の計算方法が原因で、SQLサーバーに悪影響を与える可能性があります。
yaakov

これは、出力パラメーターを使用する場合には当てはまりません。これは、次のエラー`例外が発生:文字列[2]:Sizeプロパティは、この問題を解決するには0.`の無効なサイズ、使用サイズ= -1参照を持っているstackoverflow.com/questions/21087950/...
マイケル・K

1

このようなことをすると:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

サイズは「一部の大きなテキスト」から取得されます。長さ

これが出力パラメーターである場合、問題が発生する可能性があります。入力として入力すると、文字が返されなくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.