Pregunta

¿Cómo puedo insertar fácilmente un blob en un varbinary(MAX) en el campo?

Como un ejemplo:

lo que quiero es insertar:c:\picture.png
la tabla mytable
la columna es mypictureblob
el lugar es recid=1

¿Fue útil?

Solución

Puede insertar en un campo varbinary (max) utilizando T-SQL dentro de SQL Server Management Studio y, en particular, utilizando el comando OPENROWSET.

Por ejemplo:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath
)
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif'
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto

Eche un vistazo a la siguiente documentación para ver un buen ejemplo / tutorial

Trabajando con tipos de valores grandes

Tenga en cuenta que la ruta del archivo en este caso es relativa al servidor SQL de destino y no a su cliente que ejecuta este comando.

Otros consejos

Tiene un artículo de MSDN Trabajar Con Grandes Tipos De Valor, que trata de explicar cómo la importación de partes de trabajo, pero que puede ser un poco confuso, ya que hace las 2 cosas al mismo tiempo.

Aquí estoy ofreciendo una versión simplificada, dividido en 2 partes.Supongamos la siguiente tabla:

CREATE TABLE [Thumbnail](
   [Id]        [int] IDENTITY(1,1) NOT NULL,
   [Data]      [varbinary](max) NULL
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) ) ON [PRIMARY]

Si ejecuta (SSMS):

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

se mostrará que el resultado se parece a una tabla con una columna denominada BulkColumn.Es por eso que usted puede utilizar en INSERTAR como:

INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

El resto es simplemente colocándolos en una plaquita con más columnas que la tabla puede tener o no tener.Si el nombre en el resultado de que select FOO a continuación, puede utilizar SELECT Foo.BulkColumn y as después de que las constantes de otros campos en la tabla.

La parte que se puede obtener más complicado es cómo exportar los datos en un archivo de forma que pueda comprobar que es todavía bien.Si se ejecuta en la línea cmd:

bcp "select Data from B2B.dbo.Thumbnail where Id=1" 
queryout D:\T\TestImage1_out2.dds -T -L 1 

Va a empezar a quejarse por 4 adicionales "params" y dar engañosa valores por defecto (que se traducirá en un archivo modificado).Usted puede aceptar la primera, establecer el 2 0 y, a continuación, assept 3º y 4º, o para ser más explícito:

Introduzca el tipo de almacenamiento de archivos de Datos de campo [varbinary(max)]:
Introduzca el prefijo de longitud de los Datos de campo [8]:0
Introduzca la longitud del campo de Datos [0]:
Introduzca el terminador de campo [ninguno]:

Entonces le pregunte:

¿Desea guardar este formato de la información en un archivo?[Y/n] y
Host nombre de archivo [bcp.fmt]:C: est\bcp_2.fmt

La próxima vez que usted tiene que ejecutar agregar -f C:\Test\bcp_2.fmt y va a dejar de lloriquear :-) Ahorra un montón de tiempo y el dolor.

Hay dos formas de SELECCIONAR un BLOB con TSQL:

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

Además de:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

Tenga en cuenta el nombre de la correlación después de la cláusula FROM, que es obligatoria.

Puede hacer esto para INSERTAR haciendo un INSERT SELECT.

También puede usar la segunda versión para hacer una ACTUALIZACIÓN como describí en Cómo actualizar un BLOB en SQL SERVER utilizando TSQL .

Sin embargo, simplemente puede leer un archivo del disco en la máquina del servidor SQL:

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a

para verlo en la aplicación de administración en forma hexadecimal (Management Studio).

Entonces, puede, por ejemplo, hacer una copia de seguridad de la base de datos en un archivo (localmente en el servidor) y luego descargarla en otro lugar mediante la declaración anterior.

¿Necesitas hacerlo desde mgmt studio? Así es como lo hacemos desde la línea cmd:

" C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe " / S & Lt; Servidor & Gt; / D & Lt; DataBase & Gt; / T mytable / C mypictureblob / F & Quot; C: \ picture.png & Quot; / W & Quot; donde RecId = & Quot; / I

Ok ... esto me llevó demasiado tiempo. La herramienta de estudio sql-management simplemente no está a la altura de cosas simples como esta (lo que he notado antes al buscar dónde establecer el tiempo de espera en las consultas, y se realizó en 4 ubicaciones diferentes)

Descargué otro paquete de editor sql (sql maestro en mi caso). Y he aquí que incluye un editor de blobs donde puedes ver blobs y cargar nuevos blobs en este campo.

¡gracias por el aporte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top