Comment économiser (tous) de SQL server image de type de données de système de fichiers avec l'extension de fichier correct
J'ai différents types de fichiers dans le tableau (txt, doc, jpg, etc) et je veux les sauver tous à mon système de fichiers. Je sais comment le faire fichier par fichier, mais il ne sert à rien, je dois faire une boucle qui enregistre tous les fichiers avec les bonnes extensions à la fois. Des conseils?
Je le fais de cette façon maintenant:
DECLARE @ObjectToken INT
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, <this is where binary data goes>
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'd:/file.txt', 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
Donc, ma question serait est-il un moyen de faire cela pour tous les enregistrements (enregistrer tous les fichiers) dans la table db à la fois et avec le réglage de l'extension de fichier pour chaque fichier enregistré?
- que demandez-vous exactement?
- Je me demande comment faire pour enregistrer des données binaires (image de type de données) à partir de sql server base de données de système de fichiers en tant que fichiers.
- votre code ressemble, il est copié à partir de heidibrebels.être/blog/archives/2011/... une raison quelconque vous n'utilisez pas le curseur de la partie, trop?
- Je n'ai pas de copie à partir de là, donc je ne vois pas la partie avec le curseur. De toute façon, comme je le vois sur heidibrebels.être/blog/archives/2011/... il enregistre tous les fichiers que .jpg, et j'ai un peu de différentes extensions de fichiers. Avez-vous peut-être de savoir comment enregistrer chaque fichier avec une extension propre?
- Toutes mes excuses pour mon hypothèse. Si vous n'avez pas stocker le nom de fichier d'origine et/ou de l'extension, il n'y a pas de moyen (facile) à les retrouver. Cependant, vous pouvez inspecter les premiers octets du fichier binaire: .jpg commence avec ff d8 ff e0 xx xx "JFIF", .png commence avec xx "PNG" (xx = arbitraire valeur hex), etc
- J'ai de nom de fichier dans l'autre colonne, il est le chemin complet de l'emplacement à partir duquel le fichier est téléchargé de finition avec le nom de fichier et l'extension. Peut-être que je peux l'obtenir à partir de cette colonne? Avez-vous peut-être de savoir comment le faire? Je vous remercie pour votre aide.
Vous devez vous connecter pour publier un commentaire.
Basé sur la le code je l'ai mentionné dans les commentaires, ET en supposant que vous utilisez SQL Server 2005 ou plus, cette solution devrait fonctionner pour vous
La
image
devrait être automatiquement converti àvarbinary(max)
.(
'\'
pauses AFIN de la syntaxe.)J'ai résolu le problème. Que j'ai trouvé c'est VRAIMENT pas facile de migrer db à partir de SQL Server 2000 à 2005. La seule solution qui fonctionne est celui - ci - http://tek-works.com/fixing-there-is-already-an-object-named-sysnsobjs-in-the-database/
Après avoir terminé ces étapes, vous avez juste à définir le niveau de Compatibilité de 90. (Clic droit sur la base de données > Propriétés > niveau de Compatibilité)
Ensuite, vous pouvez utiliser VARBINARY(MAX) et enregistrez l'image type des fichiers binaires du système de fichiers.
Bonne chance avec la migration!