Le titre le dit un peu, mais je vais élaborer un peu. J'utilise SQL Server 2005 et j'écris une requête d'exportation qui retournera une liste d'utilisateurs. Certains utilisateurs ont des images de profil, d'autres non. L'image de profil n'est pas représentée dans la base de données, du tout. Il y a juste un fichier sur le système de fichiers, nommé [nom d'utilisateur] .jpg. Donc ce que je dois faire est de vérifier si un tel fichier existe pour l'utilisateur.Comment puis-je obtenir une liste de fichiers à partir du système de fichiers local dans SQL Server 2005?
Répondre
Eh bien, si vous devez vous pouvez toujours faire le
suivantDECLARE @fso int,
@hr int
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject', @fso OUT
A partir de ce que vous pouvez (si h = 0) obtenir un bon vieux FileSystemObject.
A partir de ce que vous devriez être en mesure de faire ce qui suit
EXECUTE sp_OAMethod @fso, 'FileExists', @hr OUT, @FileName
Mais vraiment, de vouloir ce faire, vous allez en enfer **** **** sourire
de Bien sûr, cela dépend de beaucoup de choses, de la configuration de votre serveur SQL, de l'utilisateur sous lequel il fonctionne, etc. Votre kilométrage peut varier.
Aller en enfer, dites-vous. Je sens que cette solution n'est pas ce que l'on pourrait appeler la meilleure pratique. Est-ce que je vous lis bien? :) Devrais-je examiner une autre solution? –
Heh. Bien ActiveX dans SQL a toutes sortes d'implications, pas moins de problèmes de sécurité. Si vous pouviez réécrire le téléchargement de façon à ce qu'il définisse un indicateur dans la base de données ou le nom de fichier qui serait le meilleur, mettez à jour la table en une fois – blowdart
Oui, je vois absolument votre point. Peut-être devoir faire cela, car il se sent comme la solution la plus sensée à la fin. C'est juste un peu plus dans la DB. Soit ça, soit je vais faire une sorte de paquetage SSIS qui le résoudra pour moi. –
Y a-t-il un bon raison de ne pas stocker les images dans la base de données? Vous ne voulez pas vraiment accéder au système de fichiers à partir de votre back-end de base de données, car donner un accès à un système de fichiers utilisateur de base de données a d'importantes implications en termes de sécurité. Cela laisse deux options: stocker les images dans la base de données, ou accéder aux fichiers uniquement à partir de votre application cliente.
La "bonne" raison pour ne pas stocker les images dans la base de données est que les bases de données sont construites pour les données, et les systèmes de fichiers basés sur les fichiers. Lorsque l'application Web a été créée, cette exportation n'était pas requise, de sorte que toute la gestion des fichiers était laissée au système de fichiers - ce que je pense toujours être la meilleure solution, et la pratique pour stocker les fichiers. –
Quelle est la taille des images? Si elles sont inférieures à 1 Mo, la base de données peut les gérer assez bien. – GilaMonster
Ils sont généralement inférieurs à 1 Mo, mais à la fin, changer la façon dont l'application entière gère les images utilisateur n'est pas vraiment une option dans ce cas. –
Si vous devez le faire depuis sql, vous pouvez utiliser xp_cmdshell et 'if exist'. Ceci n'est pas activé par défaut pour des raisons de sécurité, alors faites attention.
permettent xp_cmdshell:
sp_configure 'show advanced options', 1
reconfigure
sp_configure 'xp_cmdshell', 1
reconfigure
utilisation xp_cmdshell:
xp_cmdshell 'if exist c:\blargh.txt echo 1'
Doit-il être activé de manière permanente, ou est-il possible de l'activer simplement pendant l'exécution de la requête, puis de le désactiver à nouveau? Mais puisque tout le monde semble penser que c'est une mauvaise pratique, je vais probablement le résoudre d'une autre manière. –
vous pouvez activer puis désactiver au besoin. – rorr
- 1. Comment créer un répertoire de système de fichiers dans un appel/requête SQL Server 2005
- 2. Comment faire pour restaurer une base de données SQL Server 2005 à partir d'un fichier .BAK local?
- 3. MS SQL Server 2005, écrit varbinary dans le système de fichiers
- 4. Système de fichiers TreeView
- 5. Comment gérer les fichiers de base de données du serveur SQL local?
- 6. Obtenir la liste des titres à partir de fichiers xml
- 7. Dans SQL 2005, comment déplacer les fichiers distmdl.mdf et distmdl.ldf?
- 8. Obtenir des données à partir d'un fichier Excel téléchargé sans enregistrer dans le système de fichiers
- 9. Application Web Accès au système de fichiers local
- 10. connexion SQL Server 2005 à partir d'Oracle
- 11. Comment obtenir une liste de fichiers à partir d'un répertoire Web?
- 12. Comment obtenir l'historique des connexions à MS SQL Server 2005
- 13. test de performance du système de fichiers
- 14. Obtenir une liste de tous les fichiers dans un répertoire
- 15. Une question sur le cache du système de fichiers
- 16. Obtenir une chaîne à partir de fichiers xml
- 17. Comment accéder à SQL Server 2005 à partir d'un système d'exploitation XP invité sous Virtual PC
- 18. Comment obtenir une liste de champs dans une contrainte unique
- 19. Impossible de se connecter à SQL Server 2005 Db à partir du service Windows Vista x64
- 20. Système de fichiers TreeView
- 21. Comment enregistrer une image d'une base de données SQL dans le système de fichiers En utilisant uniquement SQL?
- 22. Récursif du système de fichiers avec Powershell
- 23. Vitesse du système de fichiers iPhone/iPod
- 24. Texte des vues système dans SQL Server 2005
- 25. Obtenir des fichiers Xml à partir du site Web
- 26. Le flux de fichiers de SQL Server 2008
- 27. Comment puis-je obtenir le chemin du système de fichiers pour une ressource sur iPhone?
- 28. Comment recréer une base de données Oracle 9i à partir de fichiers de sauvegarde (fichiers ora)
- 29. Dans une procédure stockée, comment puis-je obtenir le nom du sproc dans SQL Server 2005?
- 30. comment créer des fichiers hbm à partir de fichiers java?
Y at-il une bonne raison pour vous de le faire dans SQL du tout? J'utiliserais un langage de programmation plus expressif qui comprend à la fois un système de fichiers et une couche d'accès aux bases de données. – Tomalak
L'idée initiale était de le résoudre avec SQL, mais à partir des réponses jusqu'à présent, j'ai l'impression que ce n'est pas une bonne idée. ;) Je pourrais avoir à chercher une autre solution. La raison de le faire en SQL était le facile de l'appeler à partir d'une interface web. Je ferais peut-être mieux de le faire avec SSIS à la place. –