quarta-feira, 25 de agosto de 2010

Update envolvendo duas tabelas

Hoje precisei atualizar uma tabela tomando como base uma segunda tabela e por um momento esqueci como fazer isso.
Então segue no blog para eu não esquecer mais!!!

update atlas_distorcao_estadual
set codigo_municipio = id_municipio
from atlas_distorcao_estadual e ,atlas_municipio_sre m
where e.municipio = m.municipio and e.codigo_sre = m.id_sre

Até a próxima!

quarta-feira, 21 de julho de 2010

Erro na consulta sql: "Cannot resolve collation conflict for equal to operation"

Hoje ao fazer a seguinte consulta entre duas tabelas , uma tabela normal e outra temporária comparando um campo texto apareceu a seguinte mensagem de erro no sql:"Cannot resolve collation conflict for equal to operation".

SELECT *
FROM #gabarito g , opcao o
WHERE g.texto= o.texto


Nunca tinha visto esse erro. Pesquisando na net encontrei a seguinte explicação:
No novo ambiente, as tabelas vão assumir o collation default, a não ser quando for explicito no campo.Mas o mesmo não acontece com as tabelas temporárias.
O collation dos dois campos que devem ser comparados vão ser diferentes e o servidor vai retornar uma mensagem de erro.

A solução:

SELECT *
FROM #gabarito2 g , opcao o
WHERE g.texto COLLATE collate_do_banco = o.texto COLLATE collate_do_banco


Para descobrir qual o collate do banco:

SELECT SERVERPROPERTY ('Collation')

terça-feira, 15 de junho de 2010

Usando as funções SUBSTRING , CHARINDEX e LEN

Substring e Charindex são funções de manipulação de strings.

CHARINDEX - Retorna a posição inicial onde a string ("String a ser pesquisada") foi encontrada no texto. Se a tring não for encontrada, a função retorna zero.

Sintaxe: Charindex("String a ser pesquisada",texto)
Exemplo: Select Charindex('a', 'Brasil')
Resultado: 3

SUBSTRING - Retorna uma string com o tamanho definido em "posição final", extraída da string "texto", a partir da "posição inicial".

Sintaxe: Substring("texto", "posição inicial", "posição final")
Exemplo: Select Substring('Brasil hexa campeão', 1, 6)
Resultado: Brasil

LEN - Retorna o tamanho da string informada.

Sintaxe: LEN (string)
Exemplo: Select Len('A copa do mundo é nossa')
Resultado: 23

Um exemplo utilizando as três funções:

Tenho uma coluna (ano) em uma tabela (Copa_Mundo) que possui dados da seguinte forma: 2008_2010 .
Preciso fazer uma consulta que traga esses dados a partir do primeiro caracter depois do '_' até o final da string.

Ficaria assim:

SELECT substring(ano, (charindex('_', ano)+1), LEN (ano)) AS Ano
from Copa_mundo

Resultado:


sexta-feira, 4 de junho de 2010

Como transformar linhas em colunas no SQL 2000?

Essa dica é bem interessante, pois o sql 2000 não possui a função PIVOT que é utilizada no SQL 2005.
Então vamos lá.Eu tenho a seguinte tabela:







Eu preciso retornar os dados assim:





A minha sugestão é a seguinte:

CREATE TABLE #Produto(
id_produto INT,
cor VARCHAR(10),
qtde INT
)

INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'azul',10)
INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'verde',5)
INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'amarelo',3)

SELECT DISTINCT id_produto,MAX(azul) AS azul,MAX(verde) AS verde,MAX(amarelo) AS amarelo FROM (
SELECT id_produto,
azul = ( CASE cor WHEN 'azul' THEN QTDE END),
verde = ( CASE cor WHEN 'verde' THEN QTDE END),
amarelo= ( CASE cor WHEN 'amarelo' THEN QTDE END)
FROM #produto
) AS Tabela
GROUP BY ID_produto

DROP TABLE #produto

Resultado:

segunda-feira, 31 de maio de 2010

Trabalhando com campos datetime

Como separar a data da hora de um campo datetime?
Segue:

Declare @date datetime
Set @date = getdate()
Select Convert (CHAR(10),@date,103) As Data, CONVERT(CHAR(5),@date,108) AS HORA

Resultado:




E para remover a hora de um campo datetime?

Declare @date datetime
Set @date = getdate()
Select Cast(floor(cast(@date as float)) as datetime) as data

Resultado:

quinta-feira, 27 de maio de 2010

Como listar um campo de forma aleatória no SQL ?

Certa vez precisei criar códigos de forma aleatória e uma boa opção foi usar o seguinte comando:

SELECT (CAMPO)
FROM TABELA
ORDER BY NEWID()


Ex: SELECT COD_ALUNO FROM ALUNO ORDER BY NEWID()

Comando para listar procedures do banco de dados

O seguinte comando lista as procedures, a data de criação e a data da última alteração:

SELECT SPECIFIC_NAME, LAST_ALTERED,CREATED
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = 'DBO'
ORDER BY LAST_ALTERED DESC