2009-10-29 28 views

Respuesta

56

Puede insertar en un campo varbinary (max) usando 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 

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

Working With Large Value Types

Tenga en cuenta que la ruta del archivo, en este caso es relativo al SQL apuntado servidor y no su cliente ejecutando este comando.

+0

TSQL como en el botón 'nueva consulta' en la barra de herramientas superior ¿verdad? – Toad

+0

T-SQL es el lenguaje de consulta que utiliza SQL Server. Sí, tendrá que crear una nueva consulta ...... –

+0

gracias! le dará un giro a – Toad

1

¿Tienes que hacerlo desde el estudio mgmt? Así es como lo hacemos desde la línea cmd:

"C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe"/S < servidor>/D < Base de datos>/T mitabla/C mypictureblob/F "C: \ picture.png"/W "donde RecId ="/I

+0

euh ... ok ... pero ¿cómo sabe a qué base de datos conectarse? – Toad

+0

lo siento, parece que algunos de mis comentarios fueron rayados. la opción/S es el servidor y/D es la base de datos – cagreen

+0

¡hola !, ¡pero qué pasa con la contraseña/nombre de usuario? – Toad

0

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

He descargado 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 estos campos.

gracias por la entrada!

12

MSDN tiene un artículo Working With Large Value Types que intenta explicar cómo funciona la importación, pero puede ser un poco confuso ya que hace 2 cosas juntas. Así que aquí hay una versión simplificada y dividida en 2 partes. Asumir tabla sencilla:

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 (en SSMS):

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

se verá que el resultado se parece a una tabla con una columna llamada BulkColumn. Es por eso que se puede utilizar en INSERT como:

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

El resto es sólo ajustándolo en su inserción con más columnas, que su mesa puede o no tener. Si nombra el resultado de que seleccione FOO, puede usar SELECT Foo.BulkColumn y ass después de esas constantes para otros campos en su tabla.

El truco que puede ser más complicado es cómo exportar esos datos de nuevo a un archivo para que pueda comprobar que todavía está 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 

Se va a empezar a lloriquear por 4 "params" adicionales y dará por defecto engañosas (que atraparán dará lugar a archivo modificado). Puede aceptar primero, establecer el segundo a 0 y luego assept 3 y 4, o sea explícita:

Enter the file storage type of field Data [varbinary(max)]: 
Enter prefix-length of field Data [8]: 0 
Enter length of field Data [0]: 
Enter field terminator [none]: 

A continuación, se le pedirá:

Do you want to save this format information in a file? [Y/n] y 
Host filename [bcp.fmt]: C:\Test\bcp_2.fmt 

La próxima vez que usted tiene que ejecutarlo añadir -f C: \ Test \ bcp_2.fmt y dejará de lloriquear :-) Ahorra mucho tiempo y dolor.

+0

+1 gran esfuerzo para una pregunta que está muy pasada de moda (pero siempre relevante). – Toad

+1

Se necesita especificar un alias en la cláusula FROM –

5

Hay dos formas de seleccionar un BLOB con TSQL:

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

, así como:

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

anote el nombre de correlación después de la cláusula FROM, que es obligatorio.

Puede hacer esto para INSERTAR haciendo INSERT SELECT.

También puede usar la segunda versión para hacer una ACTUALIZACIÓN como describí en How To Update A BLOB In SQL SERVER Using TSQL.

2

Sin embargo, usted puede simplemente 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 gestión en forma hexagonal (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 descargarlo a otro lugar mediante la instrucción anterior.

Cuestiones relacionadas