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
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
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 GroupID
Tâche 3
varbinary(max)
à la table. PaperWorkID
dans la table GroupID
Tâche 4
PaperWork
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.