none
8 KB を超える場合の行オーバーフロー データについて。 RRS feed

  • 質問

  • いつもお世話になっております。雅影と申します。

    【開発環境】Visual Studio 2010

    【開発言語】VB.NET

    【データベース】SQL Server Compact 3.5 SP1

    で開発を行っております。

    http://technet.microsoft.com/ja-jp/library/ms186981(v=sql.105).aspx

    のページには

    1 つのテーブルには、行ごとに最大 8,060 バイトのデータを格納できます。SQL Server 2008 の varchar 型、nvarchar 型、varbinary 型、sql_variant 型、または CLR ユーザー定義型の列を含むテーブルでは、この制限が緩和されます。これらの列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの制限を超えることができます。このことは、varchar 型、nvarchar 型、varbinary 型、sql_variant 型、または CLR ユーザー定義型の列の作成時および変更時に適用されます。また、データの更新時または挿入時にも適用されます。」

    とありますが、nvarchar 型を複数含んだデータベースで1列を8,000 バイト以内に抑えて複数列で8,060 バイト以上のレコードになるように登録しようとした場合、制限にかかってしまいエラーとなってしまいます。

    テストとしてnverchar型で長さ3000の項目が3つあるテーブルを作り、それぞれに6,000バイトの文字列を投入して保存しようとしましたが、エラーとなりました。

    私は1列が8,000バイト以内であれば、nvarchar 型を複数列使用していても8,060バイトの制限を超過できると考えたのですが、どのようにすれば8,060バイトを超過してレコードを作成できるようになるのでしょうか。ご教授願います。

    2014年2月5日 7:10

回答

  • SQL Server Compact 3.5 の話で間違いないでしょうか?
    提示されているURLは別製品(SQL Server 2008 R2)に関するページですので、記載されている内容についてどうこう思案してもあまり意味が無いかと思われます。

    Compact 3.5で使えるデータ型は以下のものしか有りませんので、紐づけるキー列とnvarchar型の列1つをもつテーブル3つに分割するか、型の制限が支障無ければntext型を使用するか、といったところではないでしょうか。
    http://technet.microsoft.com/ja-jp/library/ms172424(v=sql.105).aspx


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2014年2月6日 0:18
    • 回答としてマーク 雅影 2014年2月7日 1:36
    2014年2月5日 9:27

すべての返信

  • 検証していないので間違いかもしれませんが、登録しようとしたレコードの
    合計として8060バイトを超過したのでエラーになっていそうですね。

    nvarchar(max)を使ってはいかがでしょうか。
    8000バイトを超えるデータも登録できたと思います。
    2014年2月5日 7:16
  • SQL Server Compact 3.5 の話で間違いないでしょうか?
    提示されているURLは別製品(SQL Server 2008 R2)に関するページですので、記載されている内容についてどうこう思案してもあまり意味が無いかと思われます。

    Compact 3.5で使えるデータ型は以下のものしか有りませんので、紐づけるキー列とnvarchar型の列1つをもつテーブル3つに分割するか、型の制限が支障無ければntext型を使用するか、といったところではないでしょうか。
    http://technet.microsoft.com/ja-jp/library/ms172424(v=sql.105).aspx


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2014年2月6日 0:18
    • 回答としてマーク 雅影 2014年2月7日 1:36
    2014年2月5日 9:27
  • コンドル様

    回答ありがとうございます。

    私が提示したURLがどうやらSQL Server のものだったため、そちらを見てnverchar(max)

    と回答いただいたのかなと思います。

    SQL Server Compact ではnverchar(max)はサポートされていないようです。

    お手数をおかけして申し訳ありません。

    今後ともよろしくお願い致します。

    2014年2月7日 1:38
  • 星 睦美様

    回答ありがとうございます。

    ntextに変更したところ、きちんと動作することが確認出来ました。

    ありがとうございます。

    今後ともよろしくお願い致します。

    2014年2月7日 1:39