设计
- 包括NULL常量在内的相等和不等比较
- 非ANSI外部联接语法
- 非ANSI内部联接语法
- 过时的语法,字符串_别名=表达式
- 在执行数据操作语句(像INSERT/UPDATE/DELETE)之后,使用TRY..CATCH结构或者检查该@@ERROR变量
- 在存储过程、视图和表值函数中支持SELECT *
- 使用SCOPE_IDENTITY()替换@@IDENTITY
- 支持ORDER BY子句中使用常量已经过时
- TOP子句用在不带ORDER BY子句的查询
- 在INSERT语句中总是使用列的列表
- 反对不带WITH关键字的表提示用法
- (聚集或非聚集)索引类型未指定
- 避免使用GOTO语句来改善可读性
- 考虑使用括号来改善可读性和避免由于逻辑操作符的优先级导致的错误。
命名
- 在命名函数的时候避免使用“fn_”前缀
- 在命名存储过程的时候避免使用“sp_”前缀
性能
- 变量@variable已声明但从未使用
- 变量@variable已使用但之前未分配
- 变量@variable已分配但其值从未使用
- 在LIKE谓词中以“%”开始的模式
- 考虑使用表变量来代替临时表
- 在触发器中避免返回结果
- 使用非常小的变量长度类型(大小为1或者2)
- 在存储过程和触发器中使用“SET NOCOUNT ON”选项
- 在WHERE子句中避免使用不等操作符(<>,!=)
- 本地游标没有关闭
- 本地游标无明确释放
- 本地游标引用无明确释放
- 在WHERE子句的函数中避免封装过滤列
- 可以从WHERE子句中提取确定性函数调用,避免不必要的表扫描
- 输入参数从未使用
- 输出参数从未赋值
- 在WHERE子句中避免使用“NOT IN”谓词
- 不要使用不带聚合函数的“GROUP BY”子句