SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Data Tech 2024

2024年11月21日(木)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

EnterpriseZine(エンタープライズジン)

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

あたらしいSQL Server/Denaliの世界

Denaliの新機能「Contained Databases」の全貌(後編)

第4回


Contained Database の照合順序

 前述の照合順序に関する問題は、まさにインスタンスとユーザーデータベース間の依存関係によって発生する問題です。しかし、Contained Databaseを使えばインスタンスの照合順序に依存しなくなるため、これらの問題が解決されます。

 先ほどの環境 (インスタンスとデータベースの照合順序が異なる環境) でエラーとなった一時テーブルを使用するクエリを、Contained Databaseとして作成したデータベース上で実行してみましょう。今度はエラーにはなりません。

CREATE TABLE T1 (T1_txt nvarchar(max)) ;
GO
CREATE TABLE #T2 (T2_txt nvarchar(max));
GO
SELECT T1_txt, T2_txt
FROM T1 
JOIN #T2 
    ON T1.T1_txt = #T2.T2_txt ;

 この結果から想像がつくと思いますが、Contained Databaseにおいては一時テーブルの照合順序にもデータベースの照合順序が適用されます。もはやここにインスタンスとの依存関係はありません。

 Contained Databaseでは、このようなインスタンスの照合順序に依存しない動作を実現するために、新たに catalog collationというものを実装しました。Catalog collationとは、SQL Serverの全てのメタデータ と言語要素 (例えば変数名や、gotoラベルなど) に使用される照合順序です。

 Catalog collationは固定でLatin1_General_100_CI_AS_WS_KS_SCと決まっています。これを変更することはできません。Contained Databaseにおいて、データベースの照合順序は、通常のデータベースと同じように任意の照合順序を設定できますが、これはユーザー データに対してのみ使用される照合順序となります。それ以外の要素についてはcatalog collationが適用されます。

 このcatalog collationの一貫性は、前述の変数バインドの問題も解決します。変数名の照合順序はインスタンスの照合順序に左右されることなく固定のcatalog collationが使用されるからです。

 Catalog collationが実装されたことで、Denaliでは新たにCATALOG_DEFAULTというキーワードがCOLLAT 句で指定できるようになります。CATALOG_DEFAULTキーワードは、データベースのメタデータの照合順序を表すキーワードです。

 CATALOG_DEFAULTは、通常のデータベースの場合はデータベースの照合順序を表し、Contained Databaseにおいてはcatalog collationを表します。

 通常のデータベースにおけるメタデータの照合順序は、必ずデータベースの照合順序と同じなので、CATALOG_DEFAULTは、データベースの照合順序です。

 一方で、Contained Databaseの場合、CATALOG_DEFAULTはcatalog collationなので、Latin1_General_100_CI_AS_WS_KS_SCです。データベースの照合順序はユーザーが任意で変更可能なので、CATALOG_DEFAULTがデータベースの照合順序と必ずしも一致するとは限りません。

 Contained Databaseと通常のデータベースの照合順序に関する動作の違いは、まとめると以下のようになります。

 Contained Databaseにおける照合順序はDATABASE_DEFAULTか、CATALOG_DEFAULTとなっており、インスタンスやtempdbの照合順序に依存していないことがわかります。

次のページ
照合順序のコンテキスト

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
あたらしいSQL Server/Denaliの世界連載記事一覧

もっと読む

この記事の著者

古賀 啓一郎(コガ ケイイチロウ)

日本マイクロソフト株式会社勤務。きままなエンジニア。
謎があると解決せずにはいられない性格。
週末は家事に従事。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3377 2012/02/10 17:45

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング