Arquivo da tag: sql

Sql Server, veja como executar um comando sql a partir do resultado de um select

Sql Server, veja como executar um comando sql a partir do resultado de um select

Nota: a execução do resultado do comando sql é linha-a-linha, ou seja, só posso executar um comando por vez, ok? vamos aos exemplos

Exemplo 1 – simples select sendo executado:

Exemplo 2 – Efetuando a chamada de procedure baseada nos resultados da consulta retornada pelo select.

No contexto, a procedure atende uma regra de negocio de mudança infrações de trânsito de um processo para outro, dito isto, no select faço a pesquisa de três infrações para escrever um comando sql que serve para rodar a procedure com os parâmetros informados dinamicamente para cada caso.

Note que na caixa de messages deu erro por conta da regra de negocio, porem o mais importante aqui é efetuou a chamada dos três comandos gerados no select dentro do loop while do cursor.

A execução linha-a-linha da string atribuída a variável @sql foi feita através da chamada “EXECUTE sp_executesql @sql”

Bom é isto, espero que seja útil vc. Dúvidas cruéis só postar nos comentários, ok?

Até o próximo post…

Deixe um comentário

Arquivado em Banco de Dados, SQL

SQL – Exemplo de como extrair nome, ultimo sobrenome e sobrenome completo

Exemplo de como extrair nome, ultimo sobrenome e sobrenome completo.

select
 nome_pessoa AS NOME_COMPLETO,
 CASE 
	WHEN CHARINDEX(' ',LTRIM(RTRIM(nome_pessoa))) > 0  THEN LEFT(nome_pessoa, CHARINDEX(' ',LTRIM(RTRIM(nome_pessoa)))-1) 
	ELSE nome_pessoa 
END AS 'NOME',
CASE 
	WHEN CHARINDEX(' ',REVERSE(LTRIM(RTRIM(nome_pessoa)))) > 0 THEN RIGHT(nome_pessoa, CHARINDEX(' ',REVERSE(LTRIM(RTRIM(nome_pessoa))))-1)
	ELSE '' 
END AS 'ULTIMO_SOBRENOME',
CASE 	
	WHEN CHARINDEX(' ',LTRIM(RTRIM(nome_pessoa))) > 0  THEN 	
		LTRIM(RTRIM(SUBSTRING(nome_pessoa, CHARINDEX(' ',LTRIM(RTRIM(nome_pessoa))), (LEN(LTRIM(RTRIM(nome_pessoa)))+1 - CHARINDEX(' ',LTRIM(RTRIM(nome_pessoa))) )) ))
	ELSE '' 
END AS 'SOBRENOME_COMPLETO'

FROM TB_PESSOA

Saída de exemplo:

resultado_2016-09-28_171058

6 Comentários

Arquivado em Sem categoria

Sql server – Exemplo de como gerar hash (MD5) a partir de uma string

Segue exemplo para gerar hash a partir de uma string:

--Gerando código Hash no SQL Server
select RIGHT(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','texto p/ codificar no hash')),32)

--resultado gerado baseado na string informada "texto p/ codificar no hash"
d5cd8ad81ab36d83247467e9432c231a

Lembrando que o hash é uma mão de via única, ou seja, vc gera um código hash a partir de uma string e não consegue fazer o caminho inverso

[]s
Ricardo

3 Comentários

Arquivado em MD5, SQL

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

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/

35 Comentários

Arquivado em SQL

Exemplo de insert massivo

No exemplo o insert massivo é para popular a tabela_2 com dados da tabela_1, note que para funcionar as colunas do select devem coincidir com as colunas do insert.

INSERT INTO TABELA_2
 	   (CHAVE_TABELA_1, VALOR_TABELA_2, NOME_TABELA_2, DT_TABELA_2, DESCRICAO_TABELA_2)
(SELECT CHAVE_TABELA_1, VALOR_TABELA_1, NOME_TABELA_1, DT_TABELA_1, DESCRICAO_TABELA_1
		FROM TABELA_1
	WHERE
		 CHAVE_TABELA_1 = @CHAVE_TABELA_1)

Deixe um comentário

Arquivado em Banco de Dados, SQL

Conexao Ms Sql Server 2000

Exemplo de classe para realizar conexão no Ms SQL Server 2000:

import java.sql.*;

public class ConDBSQL {
 public static void main(String args[]) {
 // Criando as variáveis de conexão e de statement
 Connection con;
 Statement stmt;
 String query = "select name , id from sysobjects";

 // Verificando se o driver JDBC está instalado e pode ser utilizado
 try{
 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
 }
 catch(java.lang.ClassNotFoundException e){
 System.err.print("ClassNotFoundException: ");
 System.err.println(e.getMessage());
 }
 try{
 // Abrindo a conexão com o servidor, login sa e sem senha
 //jdbc:microsoft:sqlserver://server1:1433;User=test;Password=secret
 con = DriverManager.getConnection("jdbc:microsoft:sqlserver://ipOuNomeDoServidor:1433","usuarioBD","senhaBD");

 stmt = con.createStatement();

 // Criando a instrução a partir do SELECT que está dentro da variável query
 ResultSet rs = stmt.executeQuery(query);

 System.out.println("Lista de linhas da tabela sysobjects:");

 // Fazendo um loop para mostrar tudo o que foi retornado do banco
 while (rs.next()){

 // Obtendo o campo name em um string
 String name = rs.getString("name");
 // Obtendo o campo id em um inteiro
 int i = rs.getInt("id");

 System.out.println(name + " " + i);

 }
 //Fechamdno a instrução e a conexão
 stmt.close();
 con.close();
 }
 catch(SQLException ex){
 System.err.println("SQLException: " + ex.getMessage());
 }
 }
}

Obs.  não esqueça de incluir no seu path o jar do sql server.

msutil.jar

mssqlserver.jar

msbase.jar

Deixe um comentário

Arquivado em Banco de Dados, SQL

Exemplo de uso do replace no PostgreSQL

Um dia desses precisei fazer substituição de alguns caracteres dentro de alguns registros no banco, dai então usei a função replace do PostgreSQL para atender a tarefa.
No select abaixo troco toda a ocorrência de contra-barra ‘/’ por uma string vazia:

   select
     replace(coluna,'/','') as valorAposReplace,
     coluna as valorOriginal
   from tabela

valew!!!

3 Comentários

Arquivado em Banco de Dados, 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