2009-02-12 18 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)=(值)”,然后你也不会从索引中看到预期的好处。

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