Hoje há muita controversia a respeito de colocar imagens direto no banco de dados ou colocar apenas o caminho para uma pasta fisica.
Independente da discussão, aqui vai um exemplo de como colocar uma imagem no banco e depois recuperá-la.
Primeiro passo: Criar a tabela.
If Exists(Select 0 from Sys.Objects Where name = 'tbCachimbos')
Begin
Drop Table dbo.tbCachimbos
End
GO
Create Table dbo.tbCachimbos(
idCachimbo int Identity(1,1) NOT NULL,
dsCachimbo VarChar(1000) Not Null,
dsimage Image NULL,
Constraint PK_Cachimbos Primary Key Clustered (idCachimbo ASC))
* Notem o campo dsimage do tipo Image.
Segundo passo: Fazer o insert de um registro e depois colocar a imagem.
Insert Into dbo.tbCachimbos (dsCachimbo) Values ('Brebbia First Rocciata Double Silver Band')
Update dbo.tbCachimbos
Set dsimage = (Select * From OpenRowset (Bulk 'd:\Projetos\Brebbia.jpg', Single_Blob) as a )
Where idCachimbo = @@Identity
* Faça um select da tabela tbCachimbos e veja como está o campo dsimage.
Terceiro passo: Recuperar a imagem.
Para recuperar a imagem, é preciso utilizar o BCP para gravar um arquivo. O problema de gravar um arquivo imagem a partir do campo de uma tabela é conseguir recuperar a tipagem correta da coluna e gravar em um arquivo sem nenhuma alteração de conteudo.
Entre alguns exemplos que consegui, acabei optando por usar um arquivo FMT como padrão de saida.
O arquivo FMT fica assim:
9.0
1
1 SQLIMAGE 0 0 "" 1 dsimage ""
E para recuperar a imagem:
Declare @SQLcommand NVarChar(4000)
Set @SQLcommand = 'bcp "SELECT dsimage FROM BancoTeste.dbo.tbCachimbos" queryout "d:\Projetos\Brebbia_Recuperado.jpg" -T -fd:\Projetos\Imagens.fmt'
Exec xp_cmdshell @SQLcommand, no_output
quarta-feira, 16 de dezembro de 2009
Assinar:
Postar comentários (Atom)
achei interessante o post, estou pesquisando justamente isso, porém não consegui exportar o arquivo de imagem para a unidade. o que é extensão fmt? Isso funciona com a versão sql 2008?
ResponderExcluirPara mim ocorre o seguinte erro:
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Não é possível abrir o arquivo de dados do host BCP
NULL