MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[1627]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(1627番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
RE:  テーブルデザインビューの列名に  [ ] が自動的に付く。

Date: Thu, 18 Aug 2005 16:14:25 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、こんにちは

-----Original Message-----
From: kei [mailto:who@example.ne.jp]
Sent: Wednesday, August 17, 2005 10:34 AM
To: who@example.ne.jp
Subject: [ml-msde-beg:01623] テーブルデザインビューの列名に [ ] が自動的に付
く。


>またよくよく見てみると、”リース”と言う言葉に付くようです。
>[○○リース料] または
>[リース料]    または
>[リース]

列の名前などの識別子の正式な表現方法は、
ダブルクォートで囲ったり、大カッコで囲ったりします
             "識別子名"
             [識別子名]

ダブルクォート形式は、
     SET  QUOTED_IDENTIFIER
     sp_dboption の quoted identifier
     sp_configure の user options
等で、その使用を制限できますが、大カッコ形式の識別子は
常に使用することができます。

SQLServerでは、識別子に使える文字が拡張されており、例えば
空白やマイナスなどの記号も使えます。

しかしこのような文字を使用するときは、ダブルクォートや大カッコ
で囲まないと、別の意味に解釈され、SQL文のエラーになったりします。

       SELECT  [A-B]   FROM  [T  A  B  L  E]



日本語版SQLServerでは、識別子に使える記号文字の全角と半角は
区別しません。
厳密には、作成されたデータベースの「既定の照合順序」に従います。

 SELECT  DATABASEPROPERTYEX('データベース名','Collation')
          as '現在のデータベースの既定の照合順序'
を実行したときに、Japanese_CI_AS と表示される場合です。
「ひらがなとカタカナ」が区別されず、「半角と全角」が区別されません。

Japanese_CI_AS と表示されるデータベース(通常のデータベース)で
次のSQL文を実行してください。

SELECT  DATABASEPROPERTYEX('JapaneseTest','Collation')
      as '現在のデータベースの既定の照合順序'

declare @a     varchar(1)
declare @AA   varchar(2)

select @a = 'ア'          --半角
select @AA  =  'ア'     --全角
IF( @a = @AA ) PRINT  'ア = ア 一致しました'

select @a = '-'          --半角マイナス
select @AA  =  '−'    --全角マイナス
IF( @a = @AA ) PRINT  '- = −  一致しました'

select @a = '-'          --半角マイナス
select @AA  =  'ー'    --全角日本語長音横棒(全角マイナスとは違う)
IF( @a <> @AA )  PRINT  '- = 日本語長音横棒  一致しません'


それぞれのPRINT文が出力されます。

ここで注意するのは、半角マイナスと全角マイナスは同じ文字として扱われます
日本語の横棒(ー)は、マイナス記号と区別されます。

               SELECT  A-B   FROM TABLE
というSQL文があったときに、A-Bが、マイナス記号が含まれている特別な
列の名前で、[A-B]と表現しなければいけないのか、それとも、列名Aと列名B
のマイナス演算の結果なのか、区別できません。
そこで、このような曖昧な状態では、SQL文の文法エラーとします。

全角マイナス記号も、通常のデータベースでは、半角マイナスと同じ扱いを
受けるので、大カッコで囲む必要があります。[A−B]のように。

半角や全角が区別されないので、次のような命令はエラーになります。
CREATE  TABLE  TEST (
     [A-B]       VARCHAR(10) ,      --すべての文字が半角
     [A−B]    VARCHAR(10)        --すべての文字が全角
)
同じ列名が重複に存在するというエラーが出ます。


一方、
CREATE  TABLE  TEST (
     [リ−ス]   VARCHAR(10) ,       --日本語全角マイナス
     [リース]    VARCHAR(10)        --日本語横棒
)
は、日本語全角マイナスと日本語全角横棒は区別されるので、正しく
テーブルが作成されます。


この場合、
            --最初が全角マイナス
            --次が日本語横棒
                select  リ−ス ,  リース from TEST

は、SQL文のエラーになります。
日本語全角マイナスは半角マイナスと同じ扱いを受けるので、
[]で囲みます。

                select  [リ−ス] ,  リース from TEST

本来、リース(日本語横棒)には、SQL文法上は、カッコを囲む必要は
ありません。
ただ、Enterprise ManagerやAccess等では、カッコを付けて表示してくれます。






もし、データベース上で、半角文字と全角文字を区別するという設定にしたら
結果は異なります。

create database Japanese_TEST_WS
GO
SELECT  DATABASEPROPERTYEX('Japanese_TEST_WS','Collation')
      as '現在のデータベースの既定の照合順序'
GO

--照合順序を変更する
ALTER  DATABASE  Japanese_TEST_WS
   COLLATE  Japanese_CI_AS_KS_WS
GO

SELECT  DATABASEPROPERTYEX('Japanese_TEST_WS','Collation')
      as '現在のデータベースの既定の照合順序'
GO

上記のようにデータベースを作成して、

declare @a     varchar(1)
declare @AA   varchar(2)

select @a = 'ア'          --半角
select @AA  =  'ア'     --全角
IF( @a = @AA ) PRINT  'ア = ア 一致しました'

select @a = '-'          --半角マイナス
select @AA  =  '−'    --全角マイナス
IF( @a = @AA ) PRINT  '- = −  一致しました'

select @a = '-'          --半角マイナス
select @AA  =  'ー'    --全角日本語長音横棒(全角マイナスとは違う)
IF( @a <> @AA )  PRINT  '- = 日本語長音横棒  一致しません'

を実行して見てください。
半角と全角を区別しますので、半角カナと全角カナは異なります。

また、
CREATE  TABLE  TEST (
     [A-B]       VARCHAR(10) ,      --すべての文字が半角
     [A−B]    VARCHAR(10)        --すべての文字が全角
)
のテーブル作成も成功します。


以上からもわかるように、SQL Server 2000(MSDE 2000)は、
国際語対応になっており、識別子名や、列に代入する文字の
値等は、
             データベースの既定の照合順序
や
            テーブルの列単位に設定された照合順序
などに従います。


識別子に日本語を使うかどうかの問題は、永遠の課題のように思えます。

すべての製品をマイクロソフト社のもので固める環境であれば、分かり
易いので、日本語識別子が悪いとは言えないでしょう。

ただ、Linux等のWebから、WindowsのSQL Serverへ接続するような
場合は、識別子が日本語になっていると都合が悪い場合が多々
発生します。

またSQL ServerからフリーのRDBへ移植するとか、フリーRDBと
連携作業をさせるような場合も、識別子の問題が発生します。

使い勝手に重点を置くのか、移植性に重点を置くのか、その基準に
よって、日本語の良し悪しを判断されると良いでしょう


------------------------------------
Epata-IT/(株)日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    08月18日(木曜日) 16時11分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/



[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。