原文轉自:
數據庫設計經驗談(轉)
SQL編碼規范(收集)
http://hi.baidu.com/rambochow/blog/item/3ebcbb3db3758903bba16743.html

1.書寫格式
1.書寫格式

示例代碼:
存儲過程SQL文書寫格式例
select
c.dealerCode,
round(sum(c.submitSubletAmountDLR + c.submitPartsAmountDLR + c.submitLaborAmountDLR) / count(*), 2) as avg,
decode(null, 'x', 'xx', 'CNY')
from (
select
a.dealerCode,
a.submitSubletAmountDLR,
a.submitPartsAmountDLR,
a.submitLaborAmountDLR
from SRV_TWC_F a
where (to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)'
and to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') <= 'Date Range(end)'
and nvl(a.deleteflag, '0') <> '1')
union all
select
b.dealerCode,
b.submitSubletAmountDLR,
b.submitPartsAmountDLR,
b.submitLaborAmountDLR
from SRV_TWCHistory_F b
where (to_char(b.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)'
and to_char(b.ORIGSUBMITTIME,'yyyy/mm/dd') <= 'Date Range(end)'
and nvl(b.deleteflag,'0') <> '1')
) c
group by c.dealerCode
order by avg desc;
C#中里的SQL字符串書寫格式例
strSQL = "insert into Snd_FinanceHistory_Tb "
+ "(DEALERCODE, "
+ "REQUESTSEQUECE, "
+ "HANDLETIME, "
+ "JOBFLAG, "
+ "FRAMENO, "
+ "INMONEY, "
+ "REMAINMONEY, "
+ "DELETEFLAG, "
+ "UPDATECOUNT, "
+ "CREUSER, "
+ "CREDATE, "
+ "HONORCHECKNO, "
+ "SEQ) "
+ "values ('" + draftInputDetail.dealerCode + "', "
+ "'" + draftInputDetail.requestsequece + "', "
+ "sysdate, "
+ "'07', "
+ "'" + frameNO + "', "
+ requestMoney + ", "
+ remainMoney + ", "
+ "'0', "
+ "0, "
+ "'" + draftStruct.employeeCode + "', "
+ "sysdate, "
+ "'" + draftInputDetail.honorCheckNo + "', "
+ index + ")";
1).縮進
對于存儲過程文件,縮進為8個空格
對于C#里的SQL字符串,不可有縮進,即每一行字符串不可以空格開頭
2).換行
1>.Select/From/Where/Order by/Group by等子句必須另其一行寫
2>.Select子句內容如果只有一項,與Select同行寫
3>.Select子句內容如果多于一項,每一項單獨占一行,在對應Select的基礎上向右縮進8個空格(C#無縮進)
4>.From子句內容如果只有一項,與From同行寫
5>.From子句內容如果多于一項,每一項單獨占一行,在對應From的基礎上向右縮進8個空格(C#無縮進)
6>.Where子句的條件如果有多項,每一個條件占一行,以AND開頭,且無縮進
7>.(Update)Set子句內容每一項單獨占一行,無縮進
8>.Insert子句內容每個表字段單獨占一行,無縮進;values每一項單獨占一行,無縮進
9>.SQL文中間不允許出現空行
10>.C#里單引號必須跟所屬的SQL子句處在同一行,連接符("+")必須在行首
3).空格
1>.SQL內算數運算符、邏輯運算符連接的兩個元素之間必須用空格分隔
2>.逗號之后必須接一個空格
3>.關鍵字、保留字和左括號之間必須有一個空格

7.對數據庫表操作的特殊要求
7.對數據庫表操作的特殊要求
本項目對數據庫表的操作還有以下特殊要求:

1).以邏輯刪除替代物理刪除
注意:現在數據庫表中數據沒有物理刪除,只有邏輯刪除
以deleteflag字段作為刪除標志,deleteflag='1'代表此記錄被邏輯刪除,因此在查詢數據時必須考慮deleteflag的因素,deleteflag的標準查詢條件:NVL(deleteflag, '0') <> '1'

2).增加記錄狀態字段
數據庫中的每張表基本都有以下字段:DELETEFLAG、UPDATECOUNT、CREDATE、CREUSER、UPDATETIME、UPDATEUSER
要注意在對標進行操作時必須考慮以下字段
插入一條記錄時要置DELETEFLAG='0', UPDATECOUNT=0, CREDATE=sysdate, CREUSER=登錄User;查詢一條記錄時要考慮DELETEFLAG,如果有可能對此記錄作更新時還要取得UPDATECOUNT作同步檢查 ;修改一條記錄時要置UPDATETIME=sysdate, UPDATEUSER=登錄User, UPDATECOUNT=(UPDATECOUNT+1) mod 1000, ;刪除一條記錄時要置DELETEFLAG='1'

3).歷史表
數據庫里部分表還存在相應的歷史表,比如srv_twc_f和srv_twchistory_f,在查詢數據時除了檢索所在表之外,還必須檢索相應的歷史表,對二者的結果做Union(或Union All)
posted on 2008-09-02 18:03
黃小二 閱讀(490)
評論(0) 編輯 收藏 所屬分類:
[DB]