写点什么

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:552036
用户头像

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

关注

评论

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

家装工业软件的云挑战

三维家

c++ 云原生 webassembly 云计算, 开源工业软件

剧说职场:资深HR告诉你职场强人都有什么特征

雨果

职场

TiKV & TiFlash 加速复杂业务查询

TiDB 社区干货传送门

实践案例

想成为精英级开发者?请逼自己养成这10个习惯

雨果

程序员 开发者 精英

让企业数字化砸锅和IT主管背锅的软件供应链安全风险指北

FinClip

盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣

One Block Community

区块链 科技

腾讯大咖分享 | 腾讯Alluxio(DOP)在金融场景的落地与优化实践

Alluxio

腾讯 OLAP 金融 Alluxio 大数据 开源

什么?你还不知道Symbol?

是乃德也是Ned

JavaScript 7月月更

知乎高赞:数据中台——风起阿里,成于DaaS

雨果

阿里云 DaaS数据即服务

Linux 环境-TiDB组件进程维度的监控实现

TiDB 社区干货传送门

监控

西山居如何用 ONES 打造游戏工业流水线?|ONES 行业实践

万事ONES

leetcode 605. Can Place Flowers 种花问题 (简单)

okokabcd

数据结构与算法 贪心算法

【直播回顾】OpenHarmony知识赋能六期第三课—OpenHarmony智能家居项目之控制面板功能实现

OpenHarmony开发者

OpenHarmony

中国人力资源数字化生态图谱-灵活用工市场

易观分析

人力资源产业

「开源摘星计划」Harbor高可用集群设计及部署(实操+视频),基于离线安装方式

腾源会

Harbor 腾源会 开源摘星计划

基于eTS高效开发HarmonyOS课程类应用

HarmonyOS开发者

HarmonyOS

什么是主动元数据?为什么Gartner预测它是元数据管理的新方向

雨果

元数据 DaaS数据即服务

埃森哲22年《技术展望》报告:数字化转型将迎来下一个十年

雨果

数字化转型

分布式数据库技术前瞻

TiDB 社区干货传送门

数据库架构选型 数据库架构设计

活动预告|Apache Doris x Apache SeaTunnel 联合 Meetup 开启报名!

SelectDB

数据库 数据仓库 数据湖 Doris Seatunnel

送你的代码上太空,与华为云一起开发"最伟大的作品"

华为云开发者联盟

云计算 代码

昇腾AI创新大赛两大赛道怎么选?拿好这篇攻略就够了!

科技热闻

IM即时通讯如何让企业远程办公更简单高效?

BeeWorks

福昕软件亮相2022年全国化工企业数智化转型发展论坛

联营汇聚

PD-Server GRPC 接口图解

TiDB 社区干货传送门

TiKV 源码解读

AI简报-模型集成 SAM 和SWA

AIWeker

深度学习 7月月更

Spring Cloud之配置管理

Damon

7月月更

【容器篇】Docker怎么限制资源使用

技术小生

Docker 7月月更

波卡创始人 Gavin Wood:波卡治理 v2 会有哪些变化?

One Block Community

区块链 科技

在 Polkadot 中进行创建的三种方式 —— 平行链、平行线程、智能合约

One Block Community

区块链 科技

C# 使用ToolTip控件实现气泡提示

IC00

C# WPF 上位机 7月月更

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