• 締切済み

SQLServer2005におけるXML型のバイト数について

こんにちわ。 SQLServer2005を使ったデータベースサーバを構築しようとしているのですが、データベースの領域をサイジングする際にXML型のカラム定義がどれくらい必要なのかわからなくて困っています。(データベース設計書が書けなくて困ってしまいました) MSDN等では最大2GBまで確保可能とは定義されていますが、これだとnvarcharと同じ感じで定義することになると思うのですが(そうだとすると、1レコード64KB超えは確実なので、大量のレコード確保は難しく感じます)。 普通にnvarcharと同じ要領でXMLインスタンスの実バイト数を定義してしまえばよいのか、それともint型のように特定のバイト数が定まっているのか、それともXML型でのデータベース定義はまったく別のアプローチをする必要があるのかみなさまのお知恵をお借りしたいと思います。 よろしくお願いします。

みんなの回答

  • hakugen
  • ベストアンサー率36% (8/22)
回答No.1

こんにちは。 XML型はバイト数の指定はできないみたいですよ。なぜかはよく知りませんが、XML型がBLOB(バイナリラージオブジェクト型)なので文字列や数値のように指定ができないかと思われます。 確証はありませんのでご参考まで。

heygoro
質問者

お礼

ご回答、感謝します。 そうなんですよね、明示的に何バイト確保する必要があるのか一切情報ないんですよね。 でも、xmlインスタンスのBLOB的情報をレコードのどこかに確保する必要があるはずなので(Cでいうところのポインタみたいなもんだと考えていただければ)、それが実際何バイト必要なのか完全にブラックボックスなんですよね。 自分でもExpress実装してみて、どういった物理イメージになるのか試してみます。 どうも、ありがとうございました。

関連するQ&A

  • SQLServer2008での1レコードバイト数の上限を増やしたい

    こんにちは、いつも参考にさせていただいております。 通常1レコードのバイト数の上限は8060ですが、 それがSQLServer2008あたりから緩和されたと聞きました。 そこでマイクロソフトのTechNetを見ましたがよくわかりませんでした。 2つわからない点がありますのでご教授どうかお願いいたします。 ◆疑問点(1)◆ ↓で8060バイト上限が緩和できそうだと思った中での疑問です。 マイクロソフトのTechNet 「8 KB を超える場合の行オーバーフロー データ」 http://msdn.microsoft.com/ja-jp/library/ms186981.aspx 「これら(varchar 型、nvarchar 型、varbinary 型、sql_variant 型、またはCLR ユーザー定義型)の列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの制限を超えることができます。」 わからないのは、上記文章中にある「組み合わせた場合」というポイントです。 ○varchar 型とnvarchar 型、varbinary 型とsql_variant 型というように違う種類を組み合わせなければ8060バイト制限が越えられないのでしょうか? ◆疑問点(2)◆ 「8 KB を超える場合の行オーバーフロー データ」ページ内でntext型などについての注意書きがありました(下記)。 それについての疑問です。 「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」 ○ntext型とvarchar 型等との組み合わせの場合、8060バイト制限は関係ないのでしょうか?  (というよりntext型などは8060バイトレコード上限が関係ない?) 「text 型データと image 型データの使用」 http://msdn.microsoft.com/ja-jp/library/ms189574.aspx どうかご教授・ヒントなどいただけないでしょうか。 よろしくお願いいたします。 補足など必要でしたらコメントください。

  • SQLserver2005のデータベースミラーリング 32bit-64bit

    SQLserver2005のデータベースミラーリングについて教えてください。 現在Windows2003R2(32bit)+SQLserver2005(32bit)でDBを構築しています。 可用性向上のためにデータベースミラーリングを構成しようと考えています。 そのため新規にサーバーをWindows2008(64bit)+SQLserver2005SP2(64bit)で計画しています。 (メインのSQLserverはSP2にします) このとき、SQLserverは32bitと64bitの間でミラーリングは構成できるのでしょうか。 MSDNに下記記載が有りますが、これは上記の構成が可能ということでしょうか。 http://msdn.microsoft.com/ja-jp/library/ms366349(SQL.90).aspx 「SQL Server のディスク上ストレージ形式は、64 ビット環境でも 32 ビット環境でも同じです。このため、データベース ミラーリング セッションでは、32 ビット環境で実行されているサーバー インスタンスと 64 ビット環境で実行されているサーバー インスタンスを組み合わせることができます」 よろしくお願いします。

  • テーブルのバイト数計算

    SQL Server 2000 を使用しています。 Aテーブルが空の状態でのAテーブルの使用しているバイト数 及び、レコードを1件追加した際のバイト数は どの用に出してやればいいのでしょうか? Decimal型でn桁ならnバイト Nvarchar型でn桁ならnバイト という感じでAテーブルで使用してる 各列のバイト数を足してやれば空の状態のバイト数は出るのでしょうか? 検索してみてもこの辺りの事がうまく調べられなかったので どなたかアドバイスお願いいたします。

  • SQLServer2005と文字コード

    ある米国のJavaで作られたWebアプリケーションパッケージソフトウェアをインストールしました。環境はSQLServer2005 + Tomcat 6.0で、その上にこのパッケージがインストールされて動作しています。基本的に米国の製品なので英語を前提としていますが、今回は日本語のOS、日本語SQLServer上にインストールしました。このパッケージソフトウェアがパッチを提供しているので、それを適用しようと思いました。そこでインストラクションを読んでいるのですが、その中に「UTF-8ベースのデータベースを使っている場合は」というような記述があります。そこで初めて文字コードというものを意識し、自分の構築したSQLServer2005の文字コードを調べたいと思いました。私の知識は古くはUNIX系がEUC、Windows系がShift-JISで最近はUnicode(UTF-8方式)が主流?、という程度です。ウェブで調べたところどうもUTF-8にするには?テーブルの型をnvarcharなど「N」を付して作成しなければならないというようなことがわかりました。このアプリが使用するテーブル群はすべてパッケージが提供するSQLのスクリプトで作成したものですが、nvarcharでなくvarcharになっていました。ということは、UTF-8ではないということでしょうか?そもそも文字コードというのはテーブルのコラム単位なのでしょうか、それともデータベースとかもっと上位の単位なのでしょうか?SQLServer Management Studio Express上でデータベースなどいろいろな個所を右クリックしてプロパティを見ていますが特にUTF-8とかUnicodeといった記述は見つかりませんでした。このデータベースは何という文字コードなのでしょうか?調べ方をご存じの方、ご教示願います。よろしくお願いします。

  • SQLServer2008のインストール

    はじめまして。 SQLServer2008をインストールする際に、分からないところがありましたので質問させていただきます。 SQLServer2008のインストール時に、「サーバの構成」という画面で「サービスアカウント」というものを設定しなければならないのですが、各サービスに対してどういうアカウントを設定すれば良いのか分かりません。 (デフォルトで設定できそうなのが、「NT AUTHORITY\NETWORK SERVICE」と「NT AUTHORITY\LOCAL SERVICE」というものがあるのですが、これらのアカウントの意味するところが、いまいち分からないです。MSDNとやらも見てみたのですが、難しくて理解できないというのが現状です。) ちなみに、Aというパソコンから、Bというサーバに存在しているSQLServerのデータベースに、Webサービスを利用して接続する、というようなことをやりたいので、そのために必要なアカウントの設定というものがあるのでしたら、ご教授していただきたいです。 申し訳ありませんが、よろしくお願いいたします。 OS:WindowsServer2008 RDBMS:SQLServer2008 Enterprise 試用版

  • SQLServerのデータベース間でデータコピー

    こんにちは。SQLServer2000(SP3a)、VB6.0(SP5)でデータベースの勉強をしています。用語に詳しくないので、うまく説明できないと思いますが、相談にのってください。 SQLServerに、「データベースA」と「データベースB」があり、VBのコマンドボタンをクリックすると、データベースAのテーブル1のデータをそのままデータベースBのテーブル1に移動させたいと思っています。 私の知識では、データベースAのテーブル1のデータをSelectですべて読み込み、変数などに入れておき、データベースBのテーブル1にInsertするという効率の悪い方法しか思い浮かばず、レコード数が多いので、時間がかかり困っています。 他に良い方法があればアドバイスをお願いします。 よろしくお願いします。

  • SQLServerでのデータディクショナリ

    OracleでテーブルのNot Null制約や、カラムのバイト数、PKかどうかなどが取れるように、 SQL Server でも取れますでしょうか? Googleにて「SQLServer、 データディクショナリ」のキーワードで検索をしてみましたが、 出てくるのはOracleばかりでした。 (SQL Serverで使う言葉がデータディクショナリという言葉ではないのかも?) SQL Server での取得方法、もしくはGoogle検索用のワードを知りたいです。

  • T-SQL ユーザ定義関数 指定したバイト数までの文字列を返したい

    お世話になります。 SQLserver2005でユーザー定義関数に初めてトライしているのですが デバッグツールがなく、うまく動かない理由がわからず困っております。 ある文字列に対して、指定したバイト数までの文字を返すような関数を作りたいです。VBAでいうLEFT関数のバイト数指定版というのでしょうか。(すでにそんな関数があったりして。。) 以下のように作ってみたのですが、無限ループのようで、いつまでたってもデータが返ってきません。。どなたか教えていただけませんでしょうか? set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[LeftByte] (@value nvarchar,@maxbyte bigint) RETURNS nvarchar(max) AS BEGIN declare @Countvalue as bigint declare @byte as bigint declare @result as nvarchar select @byte = 0 select @Countvalue = 0 select @result = '' while @byte < @maxbyte begin select @Countvalue = (@Countvalue + 1) select @result = (left(@value,@Countvalue)) select @byte = (datalength(@result)) if @byte >= @maxbyte break else continue end RETURN @result END 宜しくお願い致します。

  • DBから同じ文字があるレコード数を数えて表示するには?

    データベースのmemoというカラムにさまざまな文字が入っています。 行いたいことはそのmemoというカラムに入っている文字と引数から取得した文字とまったく同じものレコード数を数え、その数字を出力したいと思っています。 リファレンス本を引き自分なりに使えそうな関数を探したのですが見つかりませんでした。 functionも理解できず質問させていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQLServerを使い、SQL文の練習をしたい

    SQLServerを使い、SQL文記述の 練習をしたいと考えています。 (テーブルを作る、結合させる、レコードの合計を出す、などの内容) 自分のPC上で、SQL文を書いて 「わー2つのテーブルが結合した!」 「こっちのテーブルにはないレコードだけを追加できた!」というようなことを実感したいのみなのですが、この目的での利用でも、レンタルサーバーを借りるなどして「サーバー」を準備する必要があるのでしょうか? AccessでSQL文の面白さを知り、 他のデータベース関係のソフトにも触れてみたいと 思ったのが理由です。 よろしくお願いいたします。