none
SQL文の列名を小文字で書くとクラシックASPでODBC接続時に列名が無効であるというエラーになる RRS feed

  • 質問

  • 初めて投稿いたします。初心者な質問ですが、よろしくお願いいたします。

    今までIIS6でクラシックASPを使ってサイトを構築しておりました。

    使っていたデータベースはOracleでした。

    今まで使っていた既存のクラシックASPのサイトを,

    Windows2008R2 IIS7.5 + SQL Server 2008 R2 の環境に移植しようとしています。

    問題は、SQL文です。

    Oracleでは列名を小文字で書いてもエラーにならないので、次のように記述していました。

    SELECT userid FROM master ORDER BY userid

    ところが新しい環境では列名が無効とされます。列名を大文字に変換して次のように書くと正常に表示されます。

    SELECT USERID FROM MASTER ORDER BY USERID

    今までと同じように列名を小文字で書いても問題なく動くようにするにはどうしたらいいのでしょうか?

    また、大文字にしなければならないのでしたら書き換えの量が多いのでどうすれば早く書き換えできるでしょうか?

    2012年6月27日 6:15

回答

  • データベースの照合順序は何になっていますか?
     
    これが大文字・小文字を判別する様な物になっていると、
     SQL文の実行時にも大文字・小文字が判別されます。
     ※例えば、Japanese_CS_AS等

    ここからは私の想像が正しい場合の話ですが、
    対応については照合順序を何故変えているかによってきます。
    1.別に意味は無い場合
      =>これは無いと思いますが、これであればJapanese_CI_ASにしても良いのでは・・・
    2.大文字・小文字を判別したい等の要件があった場合
      =>データベースの照合順序はJapanese_CI_ASにして、各テーブルの各列の照合順序を個別に設定する。

    見当違いだったらすいません。

    • 編集済み aviator__ 2012年6月27日 6:53
    • 回答としてマーク arikichi9864 2012年6月28日 4:05
    2012年6月27日 6:48
  • 照合順序はどうなっていますか? データベース単位の照合順序が大文字小文字を区別するようになっており、結果的に、列名を保存しているシステムテーブルでも大文字小文字が区別されているのではないでしょうか? 照合順序について調べてみて下さい。

    (追記)
    Microsoft SQL Server Management Studioでデータベースのプロパティを見ると、メンテナンス欄に照合順序が表示されています。デフォルトでは、Japanese_CI_ASのはずです。このCIがCase Ignoreで、大文字小文字を区別しない設定です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiya 2012年6月27日 6:56 追記
    • 回答としてマーク arikichi9864 2012年6月28日 4:04
    2012年6月27日 6:49

すべての返信

  • データベースの照合順序は何になっていますか?
     
    これが大文字・小文字を判別する様な物になっていると、
     SQL文の実行時にも大文字・小文字が判別されます。
     ※例えば、Japanese_CS_AS等

    ここからは私の想像が正しい場合の話ですが、
    対応については照合順序を何故変えているかによってきます。
    1.別に意味は無い場合
      =>これは無いと思いますが、これであればJapanese_CI_ASにしても良いのでは・・・
    2.大文字・小文字を判別したい等の要件があった場合
      =>データベースの照合順序はJapanese_CI_ASにして、各テーブルの各列の照合順序を個別に設定する。

    見当違いだったらすいません。

    • 編集済み aviator__ 2012年6月27日 6:53
    • 回答としてマーク arikichi9864 2012年6月28日 4:05
    2012年6月27日 6:48
  • 照合順序はどうなっていますか? データベース単位の照合順序が大文字小文字を区別するようになっており、結果的に、列名を保存しているシステムテーブルでも大文字小文字が区別されているのではないでしょうか? 照合順序について調べてみて下さい。

    (追記)
    Microsoft SQL Server Management Studioでデータベースのプロパティを見ると、メンテナンス欄に照合順序が表示されています。デフォルトでは、Japanese_CI_ASのはずです。このCIがCase Ignoreで、大文字小文字を区別しない設定です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiya 2012年6月27日 6:56 追記
    • 回答としてマーク arikichi9864 2012年6月28日 4:04
    2012年6月27日 6:49
  • ご回答いただき、ありがとうございます。

    データベースの照合順序は中身のデータにだけ適用されるものと勘違いしておりました。

    さっそく調べます。(今は照合順序がどこに設定してあって、どうすればわかるのかわからない状態です)


    ariyoshitakayuki

    2012年6月28日 4:07
  • ご回答いただき、ありがとうございます。

    データベースの照合順序は中身のデータにだけ適用されるものと勘違いしておりました。

    さっそく調べたところ

    「Japanese_XJIS_100_CS_AS」

    となっていました。

    「Japanese_XJIS_100_CI_AS」

    に変えたところ小文字も認識するようになりました。

    ありがとうございます。

    ariyoshitakayuki


    2012年6月28日 4:07