2010-04-17 13 views
11

tener un campo de imagen y desea insertar en esto de una cadena hexadecimal:Insertar valor de cadena hexadecimal de campo de imagen de SQL Server se anexando adicional 0

insert into imageTable(imageField) 
values(convert(image, 0x3C3F78...)) 
embargo

cuando corro seleccionar el valor es volver con un extra 0 como 0x03C3F78 ...

Este 0 extra está causando un problema en otra aplicación, no lo quiero.

¿Cómo detener el agregado de 0?

El esquema es:

CREATE TABLE [dbo].[templates](
    [templateId] [int] IDENTITY(1,1) NOT NULL, 
    [templateName] [nvarchar](50) NOT NULL, 
    [templateBody] [image] NOT NULL, 
    [templateType] [int] NULL) 

y la consulta es:

insert into templates(templateName, templateBody, templateType) 
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2) 

la cadena hexadecimal real es bastante grande para publicar aquí.

Respuesta

1

Esto es correcto para 0x0: cada par de dígitos que hace un byte de modo 0x00 tiene el valor almacenado

Cuando corro SELECT convert(varbinary(max), 0x55) consigo 0x55 cabo en SQL Server 2008. SELECT convert(varbinary(max), 85) me da 0x00000055 que es correcto es 85 es un entero de 32 bits

¿Qué tipo de datos está enviando a varbinary?

Editar: Todavía no puedo reproducir usando imagen no VARBINARY

Algunas preguntas sin embargo:

  • es esto una base de datos actualizada? ¿Cuál es el nivel de compatibilidad?
  • por qué usar la imagen: use varbinary (max) en su lugar
  • ¿qué ocurre cuando se cambia todo a varbinary?
+0

Selecciono un valor existente devuelve 0x3C3F78 ... y luego lo inserto como un nuevo registro. Luego, seleccionando el nuevo, devuelve 0x03C3F78 ... ¿de dónde vino el cero inicial? Está causando un error en otra parte de una aplicación. –

+0

@rotary_engine: cuál es el * exact * SQL que está ejecutando, por favor, y el esquema de la tabla. – gbn

+0

actualizar para incluir el esquema y sql, pero el valor hexadecimal real es demasiado grande para publicar aquí ... –

10

Acabo de tener un problema similar y me culpo a mí mismo.

Es posible, que copie solo una parte de los datos que necesita. En mi caso, I agregó '0' al final del blob.

La causa de esto podría ser copiar el valor de SQL Management Studio al portapapeles.


inserción en valores ImageTable (ImageField) (0x3C3F78 ... A)

Seleccionar devuelto: 0x03C3F78 ...


inserción en valores ImageTable (ImageField) (0x3C3F78 .. .A)

Seleccionar volvió: 0x3C3F78 ...


Espero que esto ayude.

Los mejores deseos.

+1

Esta solución funcionó perfectamente para mí (tal vez esta respuesta debería ser aceptada). ¡Aclamaciones! –

Cuestiones relacionadas