none
ストアドプロシージャの予約語は、大文字 or 小文字? RRS feed

  • 質問

  • お世話になります。
    SQLserver2014を使っています。

    これまでストアドプロシージャを作成してきましたが、予約後は大文字と小文字のどちらを使うのが標準的か?と考えるようになりました。
    SSMSでストアドプロシージャを新規に作成すると、以下の様に既定のコードが作られます。

    CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
        <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
    AS
    BEGIN

    この事から、「IF」や「EXISTS」といった予約語は大文字にしてきましたが、場所によっては「if exists(~)」のような記述を見ることもあり、業界標準的にはどちらが一般的なのだろうかと思うようになりました。

    この辺りの事情について自分なりにググって調べたところ、「SELECT」や「INSERT」といった部分はやはり大文字、テーブル名やカラム名は小文字が標準という情報を見かけ、自分が書いてきたコードと逆であることにショックを受けました。

    以上ですが、あくまで一般的といえる作法を教えて頂ければ幸いです。
    よろしくお願いいたします。

    2015年6月3日 3:01

回答

すべての返信

  • チャブーンです。

    個人的な認識としては、「明示的な作法=コーディングルール」はない、と思っています。ですから、たとえば可読性の高さを考慮した「一貫したルール」があればいいのではないでしょうか?

    ですが、世の中で一応「コーディングフォーマット」について、ご自分で考えるところを表明されておられる方もいらっしゃるようですので、参考になる部分もあるかもしれませんね。("Case"の項目が該当します)

    https://www.simple-talk.com/sql/t-sql-programming/transact-sql-formatting-standards-(coding-styles)/


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2015年6月3日 3:38
  • チャブーン様

    ご考察および参考情報ありがとうございます。
    参照ページをよると、やはり予約語は大文字、それ以外は小文字…ということになっていますね。
    おっしゃるように、重視すべきは一貫性というのも納得なので、同じシステム内で途中変更はしないようにしたいと思います。

    どうもありがとうございました。

    2015年6月3日 4:30
  • 結論から言えば、完全な好みでしょうね。
    ただ、昔と違ってテーブル名や列名などに日本語を使うようになってきていますから、その辺りは英語圏とは微妙に意識のずれがあると思います。私は普通に日本語で定義しますから、例えば、

    select 番号, 氏名, 年齢 from M01個人

    などのような記述になります。日本語が大文字みたいに大きいですから、

    SELECT 番号, 氏名, 年齢 FROM M01個人

    よりは好みです。よって、小文字を使う派です。これは普段C#を記述していることも影響していると思います。
    IF より if の方が断然しっくりきます。

    ちなみに、SQL Server Management Studioではインテリセンスで組み込み関数を大文字にするか小文字にするかを指定できます。デフォルトは大文字です。以下で指定できます。

    ツール -> オプション -> テキストエディタ -> Transact-SQL-> intellisense の、「組み込み関数名の文字種」

    というわけで、チャブーンさんもおっしゃられていますが、それぞれに合ったコーディング規約を作成されれば良いと思います。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年6月3日 4:42
  • チャブーンです。

    おっしゃる結論について、ちょっと気になったので、追加でコメントしますね。

    参照先の筆者が言いたかったことは、おっしゃる結論とはちがうことです。

    ----
    The key to a capitalization strategy should be readability. There’s no real right or wrong, as long as the standards are applied consistently throughout the organization (and you’re consistent with the collation of the identifiers used in the target databases).
    ----

    つまり、他者との関係性(自分の属する企業組織)をふまえて決める必要があり、金科玉条的な一般論はない、ということです。ここで出ているサンプルには複数のケースがあり、どれも合理性がある内容です。その意味でどれが正しいという示唆は、この文脈では存在しません。

    ちなみにコーディングにおいて「予約語」であるかどうかは、文字列のカテゴリわけ根拠としては薄い(特に外国人に関しては)という認識です。カテゴリわけする際のしきりとして「動詞」「名詞」「副詞」等、単語が持つ機能でわける方法が、一般的という印象です。こうすることで、「コードにさせたいこと」がはっきりとわかり、コードの可読性が大きく上がるため、という認識です。

    その意味でご質問である「予約語であること」が仕切りという文脈について、私個人としてはあまり共感を得られなかった、と言えるかもしれません。ご気分を害したかもしれませんが、ご了承ください。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2015年6月3日 4:46
  • 質問の範囲に含まれているか微妙なラインでしたので、念のためコメントしておきます。

    IFやEXISTSなどの予約語に関しては皆さんの書かれている通り、「自由」でありそれぞれのポリシーに従えばいいです。ただし、テーブル名やカラム名にはちょっとだけルールがあります。それは照合順序に従う必要があるです。つまり、照合順序で大文字小文字を区別するとした場合に、大文字で定義したカラムに小文字でクエリを書いてもアクセスできません。この部分を前述の「予約語は自由」と混同してしまうとハマります。

    もちろん照合順序が大文字小文字を区別しない場合は問題になりません。ただ、照合順序に依らず正常動作を期待したい場合は素直に定義通りの名前を使用することをお勧めします。

    # 違ってたらごめんなさい

    2015年6月3日 5:18