2009-02-12 47 views

回答

1

首先不應該使用遊標,除非絕對沒有其他方式來執行它。幾乎所有事情都可以基於集合來完成。數字表將有助於這一點。 檢查XACT_STATE註定事務。還有更多的事情需要注意的

這裏瞭解一些的SQL Server Programming Pitfalls

1

試圖把SQL就像一個編程環境可能是最大的錯誤。 SQL是關於聲明你想要的。如果你正在使用的遊標或循環結構,問問自己,如果有,你可以將它轉換爲INSERT/UPDATE

0
  1. 上可以有NULLS不給結果列做NOT IN的方式。
  2. 對可能有空值的列進行計數(cloumn)只會讓您計數非空值。
0

有許多的問題浮現在腦海:

  • NULL處理 - 很多人都無法理解的是NULL是一個非常不同的野獸不是「0」(零),並且你通常不能比較IF myCol = NULL - 你需要使用「IS NULL」或「IS NOT NULL」等等。

NULL有它的地方 - 當它真的意味着沒有選擇或值 - 但在很多情況下,你可能更好的定義一個默認值(在INT列通常爲「0」),這將代表「沒有」或「未做出選擇」等。

  • 索引 - 對索引編制有很多困惑以及優缺點,優點和缺點。索引每一列沒有意義 - 即使您已經確定了一個經常在SELECT ... WHERE子句中使用的列,如果列的選擇性不夠小(一些專家說如果一個值列不會選擇1%或更少的數據,不要打擾索引),但由於全表掃描(索引掃描)會更便宜,所以通常不會真正起到幫助作用。

而且還與索引 - 如果你使用T-SQL函數在WHERE子句中,像 「UPPER(myCol)=(值)」 或 「LEFT(myCol,10)=(值)」,然後你也不會從索引中看到預期的好處。

索引可以大大提高你的表現 - 但指數明智!