觀察很多人寫 tsql insert 的習慣,慢慢拿捏出幾種風格的好處,以及在多變的情境下,
應該會採取的策略及相關注意事項。
還是先說說新增資料的兩種方式,我們有資料表 Persons 乙張,欄位設計如下
Id 為 Identify ,CreateOn 有預設 getdate()
第一式:明確指定欄位
可以使用以下語法新增資料,由於Id、Create 會自動或提供預設值,所以可以只指定Name與
Age 欄位即可。
第二式:使用預設全選欄位
由上圖可看出,會得到相同結果;使用以上好處是,不需要指定欄位,可直接在 VALUES
關鍵字後面接要新增的資料,挺方便的
情境一:有可為Null 的欄位
先說結論,比較prefer 第一式的寫法,主要原因有以下幾種。
若「Note」欄位可為Null,且預設新建一定是空值,一般會塞入空字串(依照高效SQL設計,需要減少Null 值,
才會走索引搜尋)。此時會把欄位設定預設值為空,如下所示
所以若此時使用方法二,其實還是要手動塞值
但若使用第一式,較為方便
情境二:同表欄位擴充
雖說正式上線的功能,不應該隨便調整欄位,但實務上很難完全避免,即使要擴充也會思考看看,
是否可以新建資料表來達成,避免寬欄位;
若不幸的真要擴充欄位,來新增一欄位 ModifyOn ,不可為null 並且有預設值設定 getdate()
設計好按下儲存,既有的資料都會補上預設值
此時,使用第一式明確指定欄位的Insert 語法,不需要額外調整
但若原本使用第二式的語法就需要調整(多新增一個欄位值),如下圖
以上情境,萬一不幸的,系統已經運作一陣子,既有存在的語法就需要維護並且盤查,
若又加上資料操作語法品質沒有把關,新增資料管道多元,那就累了...。
故實務上一律嚴守明確指定欄位的新增資料撰寫方式,這應是最後一道還可以拉桿的防線了。
沒有留言:
張貼留言