2011-12-13 3 views
9

Je travaille sur un système SQL Server 2005 avec beaucoup de code copié-collé, beaucoup de calculs répétés au lieu de fonctions, de nombreuses procédures stockées qui ne diffèrent que très légèrement au lieu d'être paramétrées. Aussi beaucoup de paquets SSIS qui sont très similaires. Pour aller de l'avant, j'aimerais pouvoir détecter ce type de «code odeur». Il y a beaucoup d'outils pour cela, mais je n'ai rien trouvé pour SQL.Outil de détection de code copié/collé dans TSQL?

Des idées sur les produits à utiliser, ou les meilleures pratiques à appliquer concernant le code copié/collé dans TSQL?

Un grand merci ...

EDIT: Merci pour tous les commentaires. Je me suis baladé avec quelques-uns d'entre eux, mais celui qui semble le plus simple et le plus facile à utiliser semble être Atomiq. J'ai dû exporter tous mes objets dans des fichiers .sql, puis j'ai dû utiliser un fichier batch pour renommer tous les fichiers avec l'extension .sql en .cs car il n'utilisait pas .sql. Cependant, j'ai déjà obtenu de bonnes informations sur les problèmes majeurs de notre code.

+1

faites attention à ce que vous changez. Si vous travaillez vraiment sur un système construit par un hack, vous ne casserez rien. Cependant, si le système a été fait par quelqu'un de très bon, alors vous pourriez casser beaucoup de bons plans de requête! –

Répondre

7

Vous avez plusieurs à cette fin:

  • Atomiq - commercial
  • Black Duck Suite - commercial (suite analyse du logiciel)
  • CloneDR - commercial (Ada, C, C++, C#, Java, COBOL, Fortran, Python, VB.net, VB6, PHP4/5, PLSQL, SQL2011, XML, beaucoup d'autres)
  • ConQAT (Open Source, supporte: ABAP, ADA, Cobol , C/C++, C#, Java, PL/I, PL/SQL, Python, Texte, Transact SQL, Visual Basic, XML)
  • Simian (logiciel)
4

Vous pouvez essayer d'exécuter Simian. Il est un outil qui prend en charge de nombreuses langues (y compris SQL)

+0

Joli outil qui. +1 – gbn

1

Un outil préemballée va probablement être le moyen le plus rapide/plus facile d'y arriver, mais un moyen d'obtenir il avec des points de pirates maximum et un maximum de plaisir serait de lancer un Levenshtein distance algorithm contre le code de procédure stockée dans la base de données, qui peut facilement être accessible à l'aide:

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

Here is one example de quelqu'un mettre en œuvre l'algorithme dans T-SQL.

Bien sûr, vous devez également parcourir tous les processus et les comparer individuellement pour chaque combinaison, puis regrouper les résultats.

Je pourrais essayer moi-même, juste pour des coups de pied!