写点什么

T-SQL 静态代码分析

  • 2008-12-08
  • 本文字数:1380 字

    阅读完需:约 5 分钟

静态代码分析,在 Windows 平台上长期受到忽视,近几年却变得越来越重要。静态分析重新获得关注,始于一款 Microsoft 内部的工具——FX Cop,由于它非常受欢迎,所以微软将其公开发布。在 Visual Studio 2005 中,FX Cop 作为 Visual Studio 团队开发版的一部分集成到该 IDE 中。

带有附加功能或免除单元测试需要的第二代工具正在研发当中,包括.NET4 的 Code Contracts 和自主研发的 NStatic

托管代码并不是唯一获得关注的领域。Ubitsoft 公司正对 T-SQL 应用相同的技术。随着数据库增长,封装在 T-SQL 中的业务逻辑数量变化相当明显,有时候甚至在重要性方面胜过普通代码。要协助管理这一情况,Ubitsoft 公司创建了 SQL Enlight 。我们就此和他们的开发主管 Iliyan Stoyanov 进行了沟通。

这是个相当新颖的产品,你可以给我们一些关于 SQL Enlight 如何诞生的背景吗?

我们设计 SQL Enlight 作为 T-SQL 管理和反射工具,但由于我们需要更多的时间来实现心中的所有想法,所以决定先发布 T-SQL 重格式化功能,稍后逐步来添加新功能。

你决定对 Transact-SQL 脚本分析提供支持是基于哪一点考虑呢?

从本项目开始,该分析功能就是我们其中一个目标,但我们决定推迟它的发布,直到我们完成 T-SQL 语法分析器扩展为止,它支持新的 SQL Sever 2005 T-SQL 语法。

你如何决定给分析添加哪些规则呢?

我们实现的分析规则基本上来自互联网找到的提示和实践,或者来自 SQL Enlight 用户提交给我们的分析规则请求。

你们的技术支持提到过你正研发一个新版本,它会对整个数据库进行分析。可以给我提供一些关于它的信息吗?

是的。我们正研发新的 1.6 版本,它将是我们 SQL Enlight1.x 版本的里程碑。该新版本会包含两项重要特性——创建自定义分析规则功能和支持在数据库上运行分析。我们也打算包含命令行工具和 MsBuild 任务。

SQL Enlight 当前版本支持这些分析规则。

设计

  • 包括 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”子句

查看英文原文: Static Code Analysis for T-SQL

2008-12-08 07:552249
用户头像

发布了 87 篇内容, 共 25.3 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

星环科技春季新品发布周,4月19日-23日重磅内容等你来解锁!

星环科技

Tech Talk 活动预告丨使用 Amazon IoT Core 构建安全合规的智能产品

亚马逊云科技 (Amazon Web Services)

Amazon IoT Core

DPDK技术系统学习一(接收,发送,arp,icmp功能测试)

Linux服务器开发

虚拟化 网络协议栈 Linux服务器开发 DPDK C++后台开发

Scrum基础框架,快速配置Scrum自动化场景

阿里云云效

云计算 阿里云 Scrum 敏捷开发 研发敏捷

融云 Unity SDK 升级,专注游戏场景,更好社交体验

融云 RongCloud

互联网通信安全之 WebRTC 传输安全机制

融云 RongCloud

为什么你应该了解 Loggie

网易数帆

Go Kubernetes 云原生 日志 Loggie

网络协议之:Domain name service DNS详解

程序那些事

Java Netty 程序那些事 4月月更

Excel是世界上最危险的软件?

图灵教育

Python 数据分析 Excel

黑客是怎么cookie获取?钓鱼?键盘记录?

喀拉峻

网络安全 XSS

百度ToB垂类账号权限平台的设计与实践

百度Geek说

架构 后端

「连接」与CRM的「中国式」关系

ToB行业头条

Linux 信号(Signal)

mazhen

Linux JVM signal Linux Kenel

云端守望者(下):十八般武艺

天翼云开发者社区

云计算 云存储

Ranger对HDFS权限管理探索与实践

移动云大数据

hdfs Ranger

新华三首发400G园区核心交换机,开启园区超宽时代

H3C-Navigator

网络 交换机 智慧园区 网络交换机

记一次Kafka写入超时问题详细分析

移动云大数据

kafka

为什么说Aquqnee有望成为GameFi板块天花板

小哈区块

资产跟踪管理系统解决方案

低代码小观

资产管理 企业管理系统 #资产追踪 CRM系统 客户关系管理系统

新一代态势感知系统发布——北望

H3C-Navigator

网络安全 网络 态势感知关联分析、SOC 态势感知 安全运营

融云猿桌派:听说女生不适合搞 IT,哈?

融云 RongCloud

架构实战营 - 第 6 期 模块三课后作业

乐邦

「架构实战营」

阿里云强力贡献:如何让 StarRocks 做到极速数据湖分析

StarRocks

数据库 大数据 StarRocks

synchronized有几种用法?

王磊

Java java面试

《数字经济全景白皮书》金融科技篇 重磅发布!

易观分析

金融科技 互联网金融

使用 Serverless Devs 插件快速部署前端应用

阿里巴巴云原生

IstioCon 2022,网易数帆六年优化经验即将揭秘

网易数帆

微服务 云原生 istio 服务网格 Service Mesh (ASM)

千万张医疗影像,都去了哪里?

天翼云开发者社区

云主机 云存储

软件测试很简单么?

chenkl

测试

阿里云服务网格 ASM 正式发布商业化版本

阿里巴巴云原生

T-SQL静态代码分析_.NET_Jonathan Allen_InfoQ精选文章