2010-04-19 31 views
2

Je n'arrive pas à trouver un moyen de recevoir simultanément plus de 4000 octets via un appel à une procédure stockée. Je stocke des images d'environ 15 à 20 kilo-octets dans la table, mais en les récupérant et en les affichant sur la page, elles ont toujours une taille de 3,91 Ko (ou 4000 octets).Autorisations pour l'envoi de grandes variables via des procédures stockées (SQL Server)

Les procédures stockées ont-elles une limite quant à la quantité de données pouvant être envoyées simultanément? J'ai revérifié mes données, et je ne reçois en effet que les premiers 4000 caractères du champ varbinary(MAX).

Existe-t-il un paramètre d'autorisation pour autoriser plus de 4 000 octets à la fois?

Répondre

1

Vous devriez lire Using Large-Value Data Types

Le spécificateur max étend le stockage capacités des varchar, nvarchar, et types de données varbinary. varchar (max), nvarchar (max) et varbinary (max) sont appelés collectivement types de données de grande valeur. Vous pouvez utiliser les types de données de grande valeur pour stocker à 2^31-1 octets de données.

Les types de données de grande valeur sont similaires de comportement à leurs homologues plus petits , varchar, nvarchar et varbinary .

Si vous ne pouvez pas transmettre plus de 4000 octets, je vérifierais dans votre application cliente si elle limite ou tronque vos données. SQL Server peut prendre plus de 4000 octets en même temps.

EDIT juste trouvé ceci:

EXECUTE (Transact-SQL)

En utilisant EXECUTE avec une chaîne de caractères

Dans les versions antérieures de SQL Server, chaînes de caractères sont limitées à 8000 octets. Cela nécessite de concaténer de grandes chaînes pour une exécution dynamique. Dans SQL Server, les types de données varchar (max) et nvarchar (max) peuvent être spécifiés en pour que les chaînes puissent contenir jusqu'à 2 gigaoctets de données .

+0

L'image qui s'affiche est 4000 octets, mais je pense que le SP est en train d'obtenir 8 000 octets. Je pense que je perds la moitié des octets lorsque je la retire de la base de données sous forme hexadécimale et que je la transforme en image, ce qui me donne un peu plus de sens. –

0

Vous devez utiliser un code différent pour accéder aux objets BLOB dans SQL Server. Exemple here.

+0

Mon équipe se termine maintenant, je vais vérifier cela demain matin et voir si cela aide du tout. Je devrais aussi mentionner que j'utilise PHP pour accéder à la base de données. –

+0

Alors cet article vous sera probablement inutile car l'exemple est pour ado.net. Regardez dans l'accès BLOBs pour votre méthode particulière d'accès aux données. – Jeremy

0

Il existe un type de données appelé "image" dans SQL Server 2005. Vous devez utiliser ce type de données pour stocker un objet binaire volumineux, en particulier des images.

+1

** Les types de données ntext, text et image seront supprimés dans une future version de Microsoft SQL Server. Évitez d'utiliser ces types de données dans les nouveaux travaux de développement et prévoyez de modifier les applications qui les utilisent actuellement.** Utilisez nvarchar (max), varchar (max) et varbinary (max) à la place. Types de données fixes et de longueur variable pour stocker de grandes données binaires et non-Unicode et Unicode. Les données Unicode utilisent le jeu de caractères UNICODE UCS-2. http://msdn.microsoft.com/en-us/library/ms187993.aspx –