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, 25 de agosto de 2010
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')
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:

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:
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

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:


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()
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
SELECT SPECIFIC_NAME, LAST_ALTERED,CREATED
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = 'DBO'
ORDER BY LAST_ALTERED DESC
Assinar:
Postagens (Atom)