2016-08-29 2 views
1

J'essaie de mettre à jour une colonne varbinary (MAX), elle stocke en fait les données enregistrées d'un fichier Word qu'un utilisateur a téléchargé à partir d'un site Web. Ce qui s'est passé, c'est qu'un utilisateur a téléchargé un mauvais fichier, j'ai donc besoin de mettre à jour la colonne pour refléter le bon fichier.Mise à jour de la colonne varbinary (MAX)

Ce que je ne faisais que dans une machine d'essai j'ai téléchargé le fichier correct il a été enregistré dans la base de données et je peux voir et copier la « valeur varbinary (MAX) » et l'utiliser pour remplacer le mauvais

La valeur ressemble à: 0x504B03041400060008000 ........ FBB9

J'ai essayé une requête UPDATE simple:

UPDATE my_table Set datafile = 0x504B03041400060008000........FBB9 

Il dit 1 ligne (s) affecté, mais ce fichier ne peut pas être ouvert après avoir été téléchargé depuis le web de font-end, je remarque que la valeur enregistrée est 0x0504B03041400060008000........FBB (1 plus en plus 0 après 0x et à la fin ont disparu)

Comment puis-je faire?

Répondre

1

Le 0 supplémentaire est ajouté car la valeur entière à laquelle vous le définissez est impaire. SQL Server va le remplir avec un 0 supplémentaire pour le rendre égal.

declare @varmax varbinary(max) 
set @varmax = 0x1234567   --odd 
select @varmax     --returns 0xwith the padded 0 

set @varmax = 0x12345678  --even 
select @varmax     --returns 0x12345678 

Votre 9 est supprimé car vous entrez un nombre impair d'octets remplissant la valeur maximale. Donc, un 0 est inséré mais cela déborde le nombre maximum d'octets et est donc aussi tronqué il semble. J'ai été capable de reproduire votre erreur ... mais je ne connais pas encore le moyen de le contourner.

Voici la valeur que j'ai utilisée pour votre test. Ignorez les résultats ... mais vous pouvez les copier dans votre propre SSMS et voir la sortie correcte.

http://rextester.com/LMGQ8686

+0

même problème lorsque j'ai utilisé votre requête ci-dessus avec ma valeur. Voici le même problème mais je ne comprends pas la solution, pouvez-vous aider http://stackoverflow.com/questions/29913283 –

+0

pouvez-vous coller votre valeur? Si ce n'est pas le cas, cela se produit-il également lorsque vous REGEREZ ANSI_PADDING OFF – scsimon

+0

@RonaldinhoLearnCoding a ajouté une modification. Je n'ai pas compris comment l'éviter, mais j'ai compris pourquoi – scsimon