Ir para conteúdo
Fórum Script Brasil

Evandro Junqueira Ramos

Membros
  • Total de itens

    11
  • Registro em

  • Última visita

Posts postados por Evandro Junqueira Ramos

  1. Pelo que eu entendi, este campo é do tipo VARCHAR, correto?

    Se for, você pode utilizar a função REPLACE do SQL Server, substituindo o caractere '.' por uma string vazia.

    Assim, você atualizaria o campo com o resultado desta função.

    No seu caso, ficaria:

    UPDATE afd 
    SET dados = REPLACE(dados,'.','')
    WHERE <filtro>

    Referência do Replace:

    REPLACE (Transact-SQL)

    Espero ter ajudado,

    Abs!

  2. Você pode transformar a sub query em uma view também, pode facilitar.

    Abs!

    Olá novicebg

    Já passei por uma situação semelhante e resolvi utilizando uma sub query para agrupar os dados pela data desejada (MIN ou MAX).

    Criei uma estrutura semelhante a que você descreveu...

    Evandro,

    Vou testar e posto o resultado.

    Muito obrigado.

  3. Olá novicebg

    Já passei por uma situação semelhante e resolvi utilizando uma sub query para agrupar os dados pela data desejada (MIN ou MAX).

    Criei uma estrutura semelhante a que você descreveu para simular a situação e gerei um script que atende a sua necessidade.

    Acredito que haja uma solução melhor, mas o script abaixo pode ser um modelo para resolver o seu problema:

    -- Criando tabelas para teste
    CREATE TABLE #endereco (id INT IDENTITY PRIMARY KEY, endereco VARCHAR(100))
    CREATE TABLE #pessoa (id INT IDENTITY PRIMARY KEY, nome VARCHAR(100), dtNasc DATETIME, endereco INT FOREIGN KEY REFERENCES endereco(id))
    
    -- Inserindo dados nas tabelas
    INSERT INTO #endereco VALUES ('endereco 1')
    INSERT INTO #endereco VALUES ('endereco 2')
    INSERT INTO #endereco VALUES ('endereco 3')
    
    INSERT INTO #pessoa VALUES ('Pessoa A','1986-05-01',1)
    INSERT INTO #pessoa VALUES ('Pessoa B','1943-12-25',2)
    INSERT INTO #pessoa VALUES ('Pessoa C','1960-04-21',1)
    INSERT INTO #pessoa VALUES ('Pessoa D','1989-01-06',1)
    INSERT INTO #pessoa VALUES ('Pessoa E','1988-06-17',2)
    
    -- Realizando consulta desejada
    SELECT 
        P.id, P.nome, P.dtNasc, P.endereco, E.endereco 
    FROM 
        #pessoa P 
    INNER JOIN (SELECT DISTINCT MIN(dtNasc) AS dtNasc, endereco FROM #pessoa GROUP BY endereco) M ON
            M.endereco = P.endereco
        AND M.dtNasc = P.dtNasc
    INNER JOIN #endereco E ON
            E.id = P.endereco
    
    -- Excluindo tabelas
    DROP TABLE #pessoa
    DROP TABLE #endereco

    Abs...

  4. Raphael,

    Acho que você não entendeu..

    O script que eu enviei precisa ser modificado de para atender às suas tabelas.... provavelmente deu erro naquele "+ ... + "

    Eu coloquei uma sintaxe de exemplo, naquele script você precisaria colocar cada coluna de sua tabela convertendo ela para VARCHAR(10) e concatenando com um ";"

    Se você puder passar os campos das tabelas eu posso montar o script final...

    A sugestão do Marcelo também é boa, você não precisaria migrar toda a base de dados, bastaria instalar uma instancia do SQL Server 2008 com o Management Studio e utilizar o Wizard para exportar os dados.

    Abraço!

    Muito obrigado Marcelo, mas o excel tem um limite que só abre 1milhão de linhas! Dai não consigo abri-lo!

    Evandro,

    Com esse comando está dando erro de "Sintaxe incorreta próxima a '+'."

    Caso possa interagir pelo TeamViewer e me ajudar agradeço profundamente!

    Grande Abraço!

  5. Perdão Raphael,

    O recurso que citei realmente não está disponível na versão Express do SQL Server 2005.

    A solução do Marcelo_2 pode resolver o seu problema.

    Uma outra sugestão também seria modificar a query para atender ao formato CSV, como desejado.

    Não sei se é a melhor opção, mas a consulta ficaria parecida com:

    SELECT CAST(dbo.coluna0.campo0 AS VARCHAR(10) + ';' + CAST(dbo.coluna0.campo1 AS VARCHAR(10)) + ';' + .... + CAST(dbo.coluna3.campoN AS VARCHAR(10)) + ';'
    FROM dbo.coluna0, dbo.coluna1, dbo.coluna2, dbo.coluna3

    - Como eu não sabia quantas colunas cada tabela teria, utilizei campos fictícios (campo0, campo1, ... , campoN)

    - Utilizei o tamanho 10 para representar o número convertido. Se necessário, você pode alterar este tamanho conforme sua necessidade

    Desse modo, todos os campos do resultado foram concatenados utilizando o separador ";"

    Se você utilizar o "Save result as...", deve obter o resultado esperado.

    Abraço,

  6. Olá Raphael!

    Utilizo o SQL Server 2008 Express, mas esta dica também vale para as versões do SQL Server 2005.

    O SQL Server possui Wizards para importação e exportação de dados. Além disso, um dos formatos disponíveis para exportação é justamente o formato excel (O CSV também pode ser utilizado se necessário).

    Se os seus dados já estão em uma tabela no banco de dados "analise", basta acessar o SQL Server Management Studio, conectar o Object Explorer ao banco de dados e em seguida clicar com o botão direito do mouse sobre o banco de dados. No menu exibido, acesse o submenu "Tasks" e clique na opção "Export Data...".

    Uma janela de wizard será exibida. Ela solicitará as informações de conexão para a fonte de dados (base de dados "analise" e para o destino, onde você poderá escolher o formato a ser utilizado). Nas opções de destino, você encontrará a opção "Microsoft Excel" e inclusive poderá escolher a versão do Excel a ser utilizada (97 / 2003 / 2007 / etc).

    Caso o formato CSV seja necessário, você poderá selecionar o destino "Flat File" e informar os separadores a serem utilizados no arquivo de saída.

    Você encontrará maiores informações sobre esta ferramenta nos links abaixo:

    - MSDN - Using the SQL Server Import and Export Wizard to Move Data

    - Database Journal - SQL Server 2005 Import / Export Wizard

    Abraço!

  7. Olá PLEOLP,

    Fiz um exemplo simples usando uma tabela temporária #Movimento que acredito ser uma simplificação da sua tabela.

    /* Criando tabela temporária para execução da consulta */
      
      CREATE TABLE #Movimento  
      (
      idMovimento int identity (1,1) PRIMARY KEY
      ,nomeCliente VARCHAR(100)
      ,data DATETIME
      ) 
      GO
    
    /* Preenchendo a tabela temporária com alguns valores para teste*/
      
      INSERT INTO #Movimento VALUES ('Evandro', GETDATE())
      GO 5
    
      INSERT INTO #Movimento VALUES ('Carlos', GETDATE())
      GO 2
    
      INSERT INTO #Movimento VALUES ('Mariana', GETDATE())
      GO 3
    
    /* Executando a consulta */
    
      SELECT 
        TOP 1 nomeCliente 
      FROM 
        #Movimento
      GROUP BY 
        nomeCliente
      ORDER BY 
        COUNT(idMovimento) DESC

    Repare que a consulta tem 2 pontos importantes para obter o resultado esperado:

    1 - Agrupar as movimentações pelo Cliente (no seu caso, imagino que seja pelo ID ou código de cliente)

    2 - Ordenar o resultado, em odem decrescente, utilizando como campo de ordenação a expressão "COUNT(idMovimento)", que retorna o número de registros que foram agrupados em cada linha do resultado.

    Outra consideração: A função COUNT() aceita como parâmetro o caracter *, porém não aconselho utilizar neste caso, pois o SQL Server passará a incluir os registros cujo cliente é nulo no resultado.

    Espero ter ajudado.

    Abraço!

  8. Olá Eduardo!

    Não sei se entendi bem a sua questão, mas me parece que você gostaria de passar uma lista de valores como parâmetro da procedure para realizar a sua consulta.

    Se este for o seu caso, posso te indicar este link: http://sqlserverdicas.blogspot.com/2010/12...metro-para.html.

    Para seguir esta dica, será necessário trabalhar com o SQL Server 2005 ou mais recente.

    Se este não é o seu caso, peço que detalhe um pouco mais.

    Abraço!

  9. Olá Marcelo,

    Também não sei se entendi a sua pergunta, mas o próprio SQL Server oferece ferramentas para análise da performance.

    Você poderia começar utilizando o Profiler, que captura todos os comandos executados em um servidor SQL Server.

    Outra opção é o SQL Server Database Engine Tuning Advisor que verifica a performance dos objetos do banco, além de possuir uma ferramenta que analisa e otimiza consultas.

    Além disso, você pode verificar se as boas práticas em Banco de Dados estão sendo empregadas em sua base (normalização, criação de índices, uso de SELECT sem o *, utilização de filtros corretos em consultas, etc.)

    Segue os links das ferramentas que citei:

    Referência do SQL Server Profiler

    http://msdn.microsoft.com/pt-br/library/ms173757.aspx

    Database Engine Tuning Advisor Overview:

    http://technet.microsoft.com/en-us/library/ms173494.aspx

    Abraço!

  10. Estou precisando ajuda para efetuar uma consulta entre duas tabelas sendo que cada uma pertence a um banco de dados diferente embora eles estejam no mesmo servidor.

    Eu tentei fazer uma consulta com a estrutura a baixo, mas a resposta foi uma tabela vazia.

    use bancoA

    use bancoB

    select nome; cpf; endereco

    from bancoA.tabelaA ; bancoB.tabelaB

    where bancoA.tabelaA.cpf = bancoB.tabelaB.cpf

    A consulta abaixo resolve o problema:

    SELECT A.nome, B.nome FROM

    bancoA.dbo.tabelaA A,

    bancoB.dbo.tabelaB B

    where A.cpf = B.cpf

    O campo cpf é do tipo VARCHAR?

    Ele está sendo utilizado para unir as tabelas.

    Verifique se não existe conflito entre a COLLATION dos bancos.

×
×
  • Criar Novo...