用于在SQL中检测复制/粘贴代码的工具?

时间:2011-12-13 14:58:28

标签: sql sql-server tsql

我正在使用大量复制粘贴代码的SQL Server 2005系统,大量重复计算而不是函数,许多存储过程只是非常轻微而不是参数化。还有很多非常相似的SSIS包。

继续前进,我希望能够检测出这种“代码味道”。有很多工具可以解决这个问题,但我没有为SQL找到任何东西。

有关使用产品的任何想法,或在TSQL中应用复制/粘贴代码的最佳做法?

非常感谢......

编辑: 感谢所有的反馈。我和其中几个人一起玩了一下,但看起来最简单易用的那个似乎是Atomiq。我必须将所有对象导出到.sql文件,然后必须使用批处理文件将扩展名为.sql的所有文件重命名为.cs,因为它不使用.sql。但是,我已经获得了有关代码主要问题的一些很好的信息。

3 个答案:

答案 0 :(得分:7)

你有几个为此目的:

  • Atomiq - 商业
  • Black Duck Suite - 商业(软件分析套件)
  • CloneDR - 商业广告(Ada,C,C ++,C#,Java,COBOL,Fortran,Python,VB.net,VB6,PHP4 / 5,PLSQL,SQL2011,XML等等)
  • ConQAT(开源,支持:ABAP,ADA,Cobol,C / C ++,C#,Java,PL / I,PL / SQL,Python,Text,Transact SQL,Visual Basic,XML)
  • Simian(软件)

答案 1 :(得分:4)

您可以尝试运行Simian。它是一种支持多种语言(包括SQL)的工具

答案 2 :(得分:1)

预先打包的工具可能是实现目标的最快/最简单的方法,但是使用最大的黑客点和最大的乐趣来实现这一目标的方法是对存储过程代码运行Levenshtein distance algorithm。数据库,可以使用以下方式轻松访问:

SELECT OBJECT_NAME(OBJECT_ID) as ProcName, 
       OBJECT_DEFINITION(OBJECT_ID) as ProcCode
FROM sys.procedures

Here is one example在T-SQL中实现该算法的人。

当然,您还需要遍历所有过程并将它们一对一地覆盖每个组合,然后对结果进行聚类。

我可能会自己尝试一下,只是为了踢!

相关问题