segunda-feira, 15 de março de 2010

Microsoft Community Day

Vai acontecer no dia 20/março/2010 a partir das 10:00 horas um evento bastante interessante e que tem por objetivo agradar a todos da área de TI.

 

As turmas de Infraestrutura, Desenvolvimento e Banco de Dados irão poder acompanhar em tempo real através da internet ao evento “Microsoft Community Day” que irá abordar os seguintes produtos e tecnologias:

 

1ª sessão:

- Introdução ao Azure Plataform (Evilázaro Alves)

- Windows 7 (Rodrigo Crespi)

- Forefront (Vinicius Apolinario)

- Office 2010 (Rafael Brunhosa)

 

2ª sessão:

- Sharepoint 2010 (Gilberto Uchoa)

- Exchange Server 2010 (Rodrigo Rodrigues e Anderson Patricio)

 

3ª sessão:

- Visual Studio 2010 (Agnaldo Diogo dos Santos)

- SQL Server 2008 R2 (Vitor Fava)

- Windows Server 2008 R2 (Alexandre Lopes)

- System Center: SCCM e SCOM (Marcelo Sincic)

 

Links para inscrições:

 

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032442981&EventCategory=4&culture=en-US&CountryCode=US

 

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032442397&EventCategory=4&culture=en-US&CountryCode=US

 

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032441751&EventCategory=4&culture=pt-BR&CountryCode=BR

 

O Comunidade em Ação da Microsoft (CEA) está apoiando este evento.

 

 

sexta-feira, 12 de março de 2010

Trabalhando com String Functions

A função Substring do T-SQL nos permite capturar trechos de uma string, onde repassamos a String a ser pesquisada, o índice do ínicio da pesquisa e a quantidade de caracteres que vamos ‘recortar’. Por exemplo, se quisermos obter 10 caracteres da String ‘Microsoft Sql Server 2008’ a partir do terceiro caractere, poderíamos utilizar a seguinte sintaxe:

Select substring('Microsoft Sql Server 2008', 3, 10)

O comando acima retorna a string ‘crosoft Sq’.

Mas se a nossa demanda determinasse capturar os caracteres a partir do início da string, poderíamos usar a função Left, que nada mais é que uma implementação da função Substring com o índice de início, fixa no primeiro caractere e um último parâmetro para o total de caracteres desejados:

Select left('Microsoft Sql Server 2008',10)

 

O comando acima retorna a string ‘Microsoft’.

Para realizar a mesma idéia da direita para esquerda, podemos usar a função Right:

Select right('Microsoft Sql Server 2008',10)

O comando acima retorna a string ‘erver 2008’.

Agora imagine que é solicitado a você, determinar todos os servidores de email utilizados pelos clientes cadastrados no banco de dados, baseado apenas no email cadastrado. Podemos realizar um substring, passando como parâmetro de início da captura o índice do caractere ‘@’ até o comprimento da string. Podemos fazer isso usando o comando charindex, e o comando len que nos retornam respectivamente o índice de um determinado caractere ou substring em uma string e o total de carcateres em uma string. Seria algo assim:

Select substring('rodrigo@hotmail.com',charindex('@','rodrigo@hotmail.com')+1,len('rodrigo@hotmail.com')-charindex('@','rodrigo@hotmail.com')+1)

Em uma query em cima de uma tabela, realizaríamos a implementação mais ou menos assim:

select

      substring(CampoEmail,charindex('@',CampoEmail)+1,len(CampoEmail)-charindex('@',CampoEmail)+1)

from

      clientes

Até a próxima!

 

terça-feira, 9 de março de 2010

The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Durante o deploy de uma tabela com informações de trace, encontrei a seguinte mensagem:

 

Msg 306, Level 16, State 2, Line 1

The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

 

Erros com severity level 16, são gerados pelo usuário e podem ser corrigidos pelo usuário. Campos BLOB não podem ser usados na cláusula GROUP BY.

Alterei a query e onde antes estava:

select

      TextData

from

      Altitude.Trace_Performance_02032010

where

      duration > 10000

group by

      TextData

 

Mudei para:

select

      Cast(TextData as Varchar(8000)) as TextData

from

      Altitude.Trace_Performance_02032010

where

      duration > 10000

group by

      Cast(TextData as Varchar(8000))

Até a próxima!

 

 

segunda-feira, 8 de março de 2010

Procedures não documentadas: sp_MSforeachtable e sp_MSforeachdb

Existem algumas procedures que são disponibilizadas no Sql Server, porém não apresentam nenhuma dcoumentação no Books On-Line. Isto ocorre pois algumas procedures, desempenham papéis não esenciais mas mesmo assim apresentam bastante utilidade.

É o caso das procedures sp_MSforeachtable e sp_MSforeachdb, que respectivamente executam um ou mais comandos sql, para cada objeto relacionado a sua execução. Por exemplo, sp_MSforeachtable executa um comando para cada tabela do banco de dados onde está sendo executado e sp_MSforeachdb executará um comando sql para cada banco de dados da instância onde está instalado.

Como já é de praxe aqui no TSQLMASTER.NET, vamos entender estas procedures, fazendo alguma coisa produtiva com ela. Que tal, listarmos o nome de cada tabela do banco de dados, e suas respectivas colunas? Veja o script abaixo:

--criando uma temp para armazenar os registros
create table #lista_colunas(tablename varchar(128),
    columnname varchar(150))

--executando o comando
exec sp_MSforeachtable
   'INSERT INTO #lista_colunas SELECT ''?'', NAME FROM SYS.COLUMNS WHERE OBJECT_ID=OBJECT_ID(''?'') order by 1'

--selecionando os dados
select * from #lista_colunas
    order by tablename

--elimando a tabela
drop table #lista_colunas
Interessante, mas talvez não tão útil? Vamos ver então uma tarefa bastante comum para administradores de banco de dados. Que tal executar um REBUILD em todos os índices de cada tabela do seu banco de dados, mudando o FillFactor para 80?

sp_msforeachtable 'ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 80)'

E sem esquecer da sp_MSforeachdb, vanos ver uma implementação interessante e realmente exemplar do seu uso. Que tal fazermos um backup rápido e seguro de cada um dos bancos da sua instância?

declare @cmd1 varchar(500)
declare @cmd2 varchar(500)
declare @cmd3 varchar(500)

set @cmd1 =
   'if ''?'' <> ''tempdb'' print ''*** Processando DB ? ***'''
set @cmd2 = 'if ''?'' <> ''tempdb'' backup database ? to disk=''c:\temp\?.bak'''
set @cmd3 = ''
exec sp_MSforeachdb @command1=@cmd1,
                    @command2=@cmd2,
                    @command3=@cmd3

Até a próxima!