2010-03-16 3 views
1

J'essaie de trouver un moyen de stocker des fichiers dans une base de données. Je sais qu'il est recommandé de stocker les fichiers sur le système de fichiers plutôt que sur la base de données, mais le travail sur lequel je travaille préférerait fortement utiliser la base de données pour stocker ces images (fichiers).Passage de données binaires à une procédure stockée dans SQL Server 2008

Il existe également certaines contraintes. Je ne suis pas un utilisateur admin, et je dois faire des procédures stockées pour exécuter toutes les commandes. Cela n'a pas été très difficile jusqu'ici, mais je ne peux pas pour la vie de moi établir un moyen de stocker un fichier (image) dans la base de données. Lorsque j'essaie d'utiliser la commande BULK, j'obtiens une erreur indiquant "Vous n'avez pas l'autorisation d'utiliser l'instruction de chargement en bloc". L'utilitaire en vrac semblait être le moyen facile de télécharger des fichiers dans la base de données, mais sans autorisations, je dois faire un tour de table.

J'ai décidé d'utiliser un formulaire HTML avec un type d'entrée de téléchargement de fichier et de le gérer avec PHP. Le PHP appelle la procédure stockée et passe dans le contenu du fichier. Le problème est que maintenant, il est dit que la longueur maximale d'un paramètre ne peut être que de 128 caractères.

Maintenant, je suis complètement bloqué. Je n'ai pas l'autorisation d'utiliser la commande bulk et il semble que la longueur maximale d'un paramètre que je peux passer au SP est de 128 caractères.

Je pensais rencontrer des problèmes parce que les caractères binaires et caractères ascii ne se mélangent pas bien ensemble, mais je suis dans une impasse ...

Merci

+0

question posée à plusieurs reprises sur le SO déjà ... –

+0

J'ai été coincé avec ce problème pendant quelques jours maintenant et j'ai cherché des réponses et même posé une autre question similaire. –

Répondre

0

Here is an example I've found dans le blog de David Hayden.

Il est par exemple aC#, mais les étapes devrait être similaire en PHP:

  1. Convertir votre fichier téléchargé sur un tableau d'octets
  2. Exécuter TSQL dynamique sur le serveur
+0

Merci pour l'exemple. Je vais à une réunion pour comprendre tout ce gâchis, car en ce moment je ne pense pas que j'ai les bonnes permissions pour le faire fonctionner. –

+0

Cette réponse aurait dû avoir plus de détails - l'article lié a disparu maintenant. – Paul

1

En général, nous ne transmettons pas de données binaires en SQL. Nous téléchargeons le fichier sur le serveur, puis chargeons l'image du serveur dans la base de données.

Chargez l'image dans la base de données à partir d'un fichier:

UPDATE images 
SET image = LOAD_FILE('images/myimage.jpg') 
WHERE image_id = 1234 

Obtenez l'image en arrière vers un fichier:

SELECT image 
INTO DUMPFILE 'images/myimage.jpg' 
FROM images 
WHERE image_id = 1234 
Questions connexes