miércoles, 12 de diciembre de 2012

Insertar/update fichero en BBDD

En SQL server para insertar un campo varbinary OPENROWSET
Documentación http://msdn.microsoft.com/es-es/library/ms190312.aspx

Puede no funcionar por problemas de permisos ( hay que ver como hacer que el sqlServer tenga acceso a la carpeta, sobre todo cuando el usuario de conexion no es un usuario windows)

When you use OPENROWSET, it is important to understand how SQL Server handles impersonation. For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

He compartido la carpeta \\mimaquina\SQLFICHERO en mi maquina dando permisos de lectura a todo el mundo-- >y asi funciona


INSERT INTO [dbo].[misficheros]
([id]
,[nombre]
,[adjunto])
VALUES
(9999999
,'Prueba'
,(SELECT * FROM OPENROWSET(BULK N'\\mimaquina\SQLFICHERO\untitled.png', SINGLE_BLOB ) as fichero ) )

Para leer es una historia, aun peor

Hay que usar la utilidad BCP

Información:
http://msdn.microsoft.com/es-es/library/ms162802.aspx
Ejemplo, el mejor con diferencia:
www.codeproject.com

Lo primero que tenemos que hacer es activarlo, (por defecto no está activo)
EXEC sp_configure 'show advanced options', 1; -- esta ya estaba en 1
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell',1
GO
RECONFIGURE
La ruta del disco duro donde queremos guárdalo tiene que ser accesible.
En mi maquina he compartido la carpeta \\mimaquina\\SQLFICHERO dando permisos de lectura y escritura a todo el mundo

Declare @sql varchar(500)
set @sql = 'BCP "select adjunto from [dbo].[misficheros]where [id] =9999999" QUERYOUT \\mimaquina\SQLFICHERO\mio.png -T -f
C:\blob\testblob.fmt -S '
EXEC xp_CmdShell @sql
GO

C:\blob\testblob.fmt es un archivo de formato

En informix era mucho más facil porque tenemos el :

LOTOFILE y con FILETOBLOB



En realidad la manera más facil de todas es por código, sobre todo para un programador
Escribir

Leer





No hay comentarios:

Publicar un comentario