HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

聊聊Vuex原理

yyds2026

Vue

计算机网络:以太网与IEEE 802.3

timerring

计算机网络 11月月更

HummerRisk V0.5.1 发布:新增对象存储、优化K8s 资源态势和资源拓扑等

HummerCloud

Kubernetes 云原生 云安全 云原生安全

PLC与SCADA的什么区别和联系

2D3D前端可视化开发

物联网 PLC 工业控制 web组态 SCADA

使用EasyCV Mask2Former轻松实现图像分割

阿里云大数据AI技术

深度学习 计算机视觉 图像处理 图像分割 企业号十月 PK 榜

OKR之剑·实战篇03:OKR的跟踪需要有“自己”的节奏

vivo互联网技术

团队管理 OKR 目标管理

使用SQL加密函数实现数据列的加解密

华为云开发者联盟

大数据 后端 华为云 数据加密

web技术分享| 日期选择限制组件二次封装

anyRTC开发者

Vue 前端 Web Element

华为云Astro的前世今生:用7年时间革新低代码开发观念

华为云开发者联盟

低代码 华为云

查看、校验、归档…带你掌握openGauss账本数据库

华为云开发者联盟

数据库 后端 华为云

软件测试 | 测试人员必须掌握的测试用例

测试人

软件测试 自动化测试 测试开发 测试用例

[力扣] 剑指 Offer 第二天 - 反转链表

陈明勇

Go 数据结构与算法 力扣 11月月更

【LeetCode】字符串相加Java题解

Albert

算法 LeetCode 11月月更

多视角碰撞,探索 Serverless 企业落地更多可能性丨阿里云用户组厦门站

云布道师

阿里云 云原生

实时云渲染vs本地渲染,哪个更好用?

Finovy Cloud

云渲染 实时云渲染

OceanBase 首席科学家阳振坤博士入选2022 年度“CCF王选奖”

OceanBase 数据库

带你了解S12直播中的“黑科技”

华为云开发者联盟

云计算 后端 音视频 华为云 实时直播

比DataX快20%!SeaTunnel同步计算引擎性能测试全新发布

Apache SeaTunnel

spark DataX Seatunnel 数据集成平台 数据引擎

SREWorks v1.3 版本发布 | 插件机制发布

阿里云大数据AI技术

大数据 运维 插件

阿里云产品经理刘宇:Serverless 的前世今生

云布道师

阿里云 Serverless 云原生

最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”

牵着蜗牛去散步

人工智能 腾讯云 腾讯 腾讯云AI

Dive into TensorFlow系列(2)- 解析TF核心抽象op算子

京东科技开发者

tensorflow TF2 Tensor Op

彻底搞懂Vue虚拟Dom和diff算法

yyds2026

Vue

vue的几个提效技巧

yyds2026

Vue

直播预告|OceanBase 社区版 4.0 全解析

OceanBase 数据库

count(*)查询性能很差?用这5招轻松优化

小小怪下士

Java 程序员 后端

[力扣] 剑指 Offer 第二天 - 从尾到头打印链表

陈明勇

Go 数据结构与算法 力扣 11月月更

技术分享 | 测试人员必须掌握的测试用例

霍格沃兹测试开发学社

docker修改容器的端口、容器名、映射地址......

A-刘晨阳

Docker Linux 运维 11月月更

数据库独角兽SingleStore:没有HTAP,机器学习和人工智能都是不切实际的

StoneDB

数据库 开源 HTAP StoneDB SingleStore

使用 SAP Cloud Application Programming 编程模型开发一个图书管理 OData 服务

汪子熙

云原生 CAP SAP 企业级应用 11月月更

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