Arquivo da tag: SQL Server

SQL Server – Uso de view (Exemplo)

VIEW é basicamente uma tabela virtual fruto de resultados de uma query (SELECT)

criar a view:


--sintaxe
  CREATE VIEW <nomeView> AS (
	SELECT <coluna_1, coluna_2, coluna_n> 
     FROM <tabela> WHERE <condiçãoDoSeuWhere>
     )

--nosso exemplo:
CREATE VIEW VW_LISTA_ALL_USUARIOS as (
	SELECT LOGIN,SITUACAO_CONTA,DATA_CRIACAO
	 FROM USUARIO
		WHERE SITUACAO is not null
		and SITUACAO in ('ativo','inativo')
)

Obs: na sintaxe, dentro das tags "<" e ">" vc troca para atender o seu caso.

No exemplo acima a view tem um SELECT que traz o login, situacao da conta e data de criação do registro. Uma vantagem no uso de views é que
vc pode ter uma mega query e na sua aplicação vc só chamar a view com where bem sussegado.

Forma de uso:


--Traz os usuários que foram criado nos ultimo mês.
--GETDATE() é uma função do sql server p/ pegar data de hoje
SELECT * FROM VW_LISTA_ALL_USUARIOS AS vw where vw.DATA_CRIACAO > GETDATE()-30

--Traz os usuários com situação de inativo
SELECT * FROM VW_LISTA_ALL_USUARIOS AS vw where vw.SITUACAO  = 'inativo'

Para recriar a view a sintaxe eh:


--sintaxe
REPLACE VIEW <minhaViewMarota> AS (
	SELECT <coluna_1, coluna_2, coluna_n> FROM <tabela> WHERE <condicao>
)

--nosso exemplo:
REPLACE VIEW VW_LISTA_ALL_USUARIOS AS (
	SELECT * FROM USUARIO
)

Para deletar/dropar a view a sintaxe eh:


--sintaxe
DROP VIEW <minhaViewMarota>

--nosso exemplo:
DROP VIEW VW_LISTA_ALL_USUARIOS

Hoje escrevi meio jogo rápido. qqr dúvida ou info pra acrescentar é só comentar.

[]s
Ricardo

Anúncios

2 Comentários

Arquivado em Banco de Dados, SGBD Sql-Server, SQL

Exemplo de uso CASE no MS Sql-Server

Para ilustrar o exemplo, suponha que temos um tabela chamada de grupo de viagem, e nesta temos dois grupos: Viagens Nacionais e Viagens Internacionais.

Agora seu chefe pediu pra vc mostrar isto no relatório apenas o texto “Nacional” para os grupos “Viagens Nacionais”
e “Internacional” para os grupos “Viagens Internacionais”. um replace na sua linguagem de costume já resolve ;-),  mas para ilustrar o uso doCASE” no
Sql-Server faremos da seguinte forma:

select
	g.DESCRICAO as textoOriginal,--o texto sem modificacao
	CASE --texto com tratamento para os casos
      WHEN g.DESCRICAO like '%internacionais'  THEN 'Internacional'
      WHEN g.DESCRICAO like '%nacionais'  THEN 'Nacional'
      else 'Não Encontrado'
	END as textoEnjambrado
	from GRUPO_VIAGEM g

	where g.DESCRICAO in ('Viagens Nacionais', 'Viagens Internacionais')

A instrução WHEN avalia a expressão “g.DESCRICAO like ‘%internacionais‘” no primeiro caso, e sendo satisfeita a condição imprime ‘Internacional‘ no retorno do registro.
Note também que é possível usar ELSE para quando nenhuma das condições anteriores seja satisfeitas.

resultado da query:

	--textoOriginal			|textoEnjambrado
	Viagens Nacionais		 Nacional
	Viagens Internacionais	 Internacional

Referência http://msdn.microsoft.com/pt-br/library/ms181765.aspx

Deixe um comentário

Arquivado em Banco de Dados, SQL

SQL-Server – como localizar/procurar coluna pelo nome em todas as tabelas do banco

SELECT
	T.name AS Tabela,
	C.name AS Coluna
FROM
	sys.sysobjects    AS T (NOLOCK)
INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U'
WHERE
	C.NAME LIKE '%NomeDoCampo%'
ORDER BY
	T.name ASC

Créditos:  http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/4426106f-a22c-456f-b463-67620bfda1ef/

13 Comentários

Arquivado em SQL

Exemplo de como limitar o número de linhas retornas no MySQL, SQL-Server e Oracle

Numa consulta ao banco de dados posso retornar milhares de linhas, porém gostaria apenas trazer os primeiros 20 registros.  Segue os exemplos de como limitar o números de linhas no bancos MySQL, SQL-Server e Oracle:

--MySQL
select coluna from tabela limit 20;
--SQL-Server
</strong>select top 20 coluna from tabela;
--Oracle
select coluna from tabela where ROWNUM <=20;

Obs. O Oracle não tem as funções “TOP” nem LIMIT. Para fazer o equivalente no Oracle usamos a função ROWNUM que conta cada registro retornado començando com 1.

Referências:
How can I limit the number of rows in Oracle. http://www.delphifaq.com/faq/databases/oracle/f594.shtml acessado em 29/12/2010.

Equivalent of SQL “TOP X” in Oracle. http://www.dougboude.com/blog/1/2006/06/Equivalent-of-SQL-TOP-X-in-Oracle.cfm acessado em 29/12/2010.

1 comentário

Arquivado em Banco de Dados, SQL

Como criar índice em banco de dados

O que é um índice?
Índice nada mais é que um indexador associado a uma coluna de uma tabela no banco de dados. Sua função é reduzir o tempo de acesso aos registros em determinada tabela.
Funciona de forma análoga a um índice remissivo de um livro, onde cada índice indica de forma objetiva a página com a informação desejada.
Bom, chega de bla bla bla… Segue um exemplo de criação de índice:

--Oracle
create index name_do_meu_indice on minha_tabela(coluna_name asc);
create index name_do_meu_indice on minha_tabela(coluna_name asc, coluna_name2 desc);
--Mysql
CREATE INDEX name_do_meu_indice ON minha_tabela (coluna_name(10));
--Sql Server
CREATE INDEX name_do_meu_indice  ON minha_tabela (coluna_name)

Referencias:
Turbocharge SQL with advanced Oracle indexing http://www.dba-oracle.com/art_9i_indexing.htm
Índice (banco de dados) http://pt.wikipedia.org/wiki/%C3%8Dndice_%28banco_de_dados%29
CREATE INDEX http://dev.mysql.com/doc/refman/4.1/pt/create-index.html
índices do SQL Server http://msdn.microsoft.com/pt-br/library/ms188783.aspx
Conceito de Índice http://www.icmc.usp.br/~sce183/conind.htm

5 Comentários

Arquivado em Banco de Dados, SQL

Localizar procedures no banco(Sql-Server) que contenham determinada palavra

A query abaixo procura no SQL-Server as procedures no banco que contêm determinada palavra em seu código.

SELECT A.NAME, A.XTYPE, B.TEXT
FROM SYSOBJECTS A (nolock)
JOIN SYSCOMMENTS B (nolock)
ON A.ID = B.ID
WHERE B.TEXT LIKE '%INTERMED_UNIDADE%' --- Informação a ser procurada no corpo da procedure, funcao ou view
AND A.XTYPE = 'P'
ORDER BY A.NAME

3 Comentários

Arquivado em Banco de Dados