quarta-feira, 16 de dezembro de 2009

Data por extenso alterando o language

Esse é um jeito bem facil e rapido para ter uma data por extenso somente trocanto o Language do banco:

*** No exemplo eu uso por padrão o us_english no banco de dados. Verifique antes qual o default language do seu banco para alterar a última linha do código:


Declare @Data DateTime

set language brazilian

Declare @Retorno VarChar(200)

If @Data is Null
Begin
Set @Data = getdate()
End

Select DATENAME(weekday, @Data) + ', ' + convert(varchar(02),DatePart(day,@Data)) + ' De ' + DateName(Month,@Data) + ' de ' + convert(varchar(04),DatePart(YEar,@Data)) + '.'

SET LANGUAGE us_english

Importar e Exportar imagem do banco.

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