Rechercher des loggings en double binarys SQL Server 2008 (image de type de données)

J'ai hérité d'une database qui a une table (300gb) complète de type de données SQL Image . Je comprends que ce type de données est déprécié.

Comme un nettoyage de routine, je veux supprimer toutes les Image double de la table où certaines conditions sont remplies.

Comment puis-je comparer efficacement datatables binarys en utilisant SQL? L'opérateur d'égalité est-il suffisant?

Voici un scénario:

 Table 'Paperwork' int ID int EmployeeID int AnotherID int AnotherFKID image Attachment 

Je veux find toutes les lignes où les Attachment , EmployeeID , AnotherID et AnotherFKID sont les mêmes. Il doit être fait avec un impact minimal sur la database puisqu'il y a plus de 1 116 313 lignes.

modifier

Le type de données Image SQL Server ne prend pas en charge LIKE ou les opérateurs de comparaison habituels.

modifier

Merci à @Martin qui a suggéré que l' Image soit castée en varbinary. J'ai ajouté à cela pour get la sum de contrôle MD5 en utilisant Hashbytes

HASHBYTES('MD5',CAST(cast([Attachment] as varbinary(max))as varbinary)) AS AttachmentMD5

Jeremy,

Tout le tout dans un script va tuer le cache tampon quand il lit dans le 300g. Divisez le travail en plusieurs tâches.

Tache 1

  • créer une table avec l' ID et un regroupement pour afficher les duplicates des trois colonnes int

Exemple de tableau

  TableID PaperWorkID GroupID 1 14 1 2 15 1 3 21 2 4 55 2 

Nous soaps maintenant que PaperWorkID s 14 et 15 partagent les mêmes colonnes int parce qu'elles font partie du même groupe.

Tâche 2

  • ajoutez une colonne ( bigint ) à la table et DATALENGTH la colonne avec la colonne DATALENGTH de la colonne Image de la table Paperwork basée sur PaperWorkID dans la table
  • supprimer tous les non-duplicates en fonction de la longueur de la database et de GroupID

Tâche 3

  • Ajoutez une colonne varbinary(max) à la table.
  • remplissez la colonne avec le hachage MD5 de la colonne image en fonction de PaperWorkID dans la table
  • Supprimer tous les non-duplicates de la table en fonction du hachage MD5 et du GroupID

Tâche 4

  • faire 2 sauvegardes de la table PaperWork
  • supprimer les loggings en double dans Paperwork fonction des éléments restant dans le tableau.

Si datatables de la colonne d'image ont été numérisées à partir du papier, il y a très peu de chances que deux numérisations produisent exactement la même image. Si datatables ont été téléchargées deux fois, vous avez de la chance.