1

適切な SQL クエリを作成したいので、SQL フォーマットの標準を知る必要があります。ロジックや効率性を意味するのではなく、正しいインデントとスペースを意味します。また、コマンドの場合も興味深いです。

適切な SQL 書式設定パターン (標準) はありますか?

4

2 に答える 2

1

データベースコーディング標準とガイドラインを見てください。2008年以降は古くなっていますが、まだ良いものは見つかりません。私は数ヶ月前にこれを探していて、本当にいいようです。

私はoracleサイトとmysqlサイトを見ていましたが、「モンスター」が正式な論文を発表することはありませんでした。

于 2012-10-25T04:32:49.233 に答える
1

今は大文字のテーブル名についての議論を始めていませんが、ほとんどの場合、SELECT / UPDATE / INSERT / DELETE ステートメントをフォーマットする方法について考えるでしょう。パブロ・ドミンゲスによるドキュメントgibenでは、このように選択をフォーマットすることを提案しています

select      t.Task_Id,
            t.Course_Id,
            t.Due_Dt,
            t.Start_Time,
            t.End_Time,
            t.Name,
            et.Completed_Flag,
            et.Completed_Dt
from BusyWork.dbo.TB_TASK t
inner join BusyWork.dbo.ENROLLMENTTASK et
on t.Task_Id = et.Task_Id
where t.Due_Dt >= @pStartDate
and t.Due_Dt <= @pEndDate
and et.Member_Id = @pMemberId
order by    t.Due_Dt,
            t.Start_Time 

そのようなスクリプト、特にその部分を読むのは(私にとって)非常に難しいと言えますfrom。そのため、私たちのシステムでは、このような規則を使用しています

select
    t.Task_Id,
    t.Course_Id,
    t.Due_Dt,
    t.Start_Time,
    t.End_Time,
    t.Name,
    et.Completed_Flag,
    et.Completed_Dt
from BusyWork.dbo.TB_TASK as t
    inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
    t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate and
    et.Member_Id = @pMemberId
order by t.Due_Dt, t.Start_Time

update,deleteステートメントでは、私は常に句を記述しようとしているので、 /にfrom簡単に書き直してテストできますupdatedeleteselect

update BusyWork.dbo.TB_TASK set
    Due_Dt = getdate(),
    Name = 'updated'
from BusyWork.dbo.TB_TASK as T
   inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
    t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate

delete BusyWork.dbo.TB_TASK
from BusyWork.dbo.TB_TASK as T
   inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
    t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate

ステートメントでは、節insertを避けようとしているので、ステートメントをプレーンに簡単に書き換えることもできます。テーブルからフィールドを追加/削除した後の問題を回避するために、常に挿入で列を明示的に指定します。また、列名にエイリアスを使用してみてください。プレーンでテストするときに正しい値を確認できますvaluesselectselect

insert into BusyWork.dbo.TB_TASK
(
    Due_Dt,
    Name
)
select
    getdate() as Due_Dt,
    'New' as Name

もう 1 つのルール - 列とテーブル/ビュー/テーブル関数には常にエイリアスを使用します。将来的にステートメントを変更するのが簡単になり、テーブル スキーマを変更する際の厄介なバグを回避するのに役立ちます。

于 2012-10-25T04:59:10.203 に答える