Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. Boa tarde Amigo, Tem jeito sim. você irá fazer um backup full do banco. Depois você pegará o arquivo e fará sua restauração (restore) no novo servidor. Tudo será igual ao ponto onde fez o backup. OBS.: são vários os problemas de criar as tabelas e copiar na mão. Você já se deparou com alguns deles.... mas sempre que for copiar estruturas inteiras, utilize o backup. Se não souber fazer, passe a versão do SQL q posto os passos... :.)
  2. Ahm... agora sim... rs. Seguinte: o seu GROUP BY está: GROUP BY mdb.casd.cr.open_date Antes de agrupar, você vai converter a data em string, pegando as 10 posições iniciais (aaaa-mm-dd). Ficaria assim: GROUP BY (convert (varchar(10), mdb.casd.cr.open_date, 102)) Não esquece dos parênteses, senão dá erro. Testa aí e depois me fala se funcionou.
  3. Sim, mas a data não poderia estar repetindo porque o script está com a cláusula GROUP BY (na data). Sendo assim, as datas não podiam se repetir. A menos que as datas estejam com as horas também....
  4. Bom dia Flávio, Ontem postei uma dúvida em relação ao script....
  5. Boa tarde Fernando, Era isto mesmo que estava precisando?
  6. Não entendi uma coisa: Perceba que as primeiras datas (3/5/2010) repetem várias vezes (como as outras). Por que desta repetição, uma vez que você está fazendo o agrupamento por data? O que retorna se colocar a coluna SUM: SELECT mdb.casd.cr.open_date, count(mdb.casd.cr.ref_num), sum (mdb.casd.cr.ref_num)
  7. Boa tarde Flávio, Posta alguns dados para exemplificar (como eles estão). Ai você fala o que deseja como resultado, ok?
  8. De nada... precisando estamos aí!!! :.)
  9. Boa tarde Fernando, ALTER TABLE NomeTabela NOCHECK CONSTRAINT ALL Depois não esqueça de ativar: ALTER TABLE NomeTabela CHECK CONSTRAINT ALL
  10. você pode criar uma Procedure, onde passa a string e ela te retorna os valores. No caso de fazer @endereco = ENDERECO, o certo seria Set @endereco = ENDERECO. Copia o script abaixo e roda. A procedure "SeparaEndereco" será criada. create Proc SeparaEndereco (@Endereco varchar(100)) as Declare @Logradouro varchar(100) Declare @Numero int Declare @Complemento varchar(20) Set @Logradouro = (ltrim(substring (@Endereco, charindex(' ',@Endereco), (charindex(',',@Endereco)-charindex(' ',@Endereco))))) Set @Endereco = substring (@Endereco, charindex(',',@Endereco), len(@Endereco)) Set @Endereco = ltrim(substring (@Endereco, charindex(' ',@Endereco), len(@Endereco))) Set @Numero = (ltrim(substring (@Endereco, 1,charindex(' ',@Endereco)))) Set @Complemento = (ltrim(substring (@Endereco, charindex(' ',@Endereco), len(@Endereco)))) select @Logradouro, @Numero, @Complemento Depois para executar a procedure: exec SeparaEndereco 'rua antonio, 000 qu 2' Qualquer dúvida, pode postar... :.)
  11. Copiar a base toda? Pode-se fazer um backup full e restaurá-lo (restore) com outro nome. Aí terá duas bases iguais no mesmo servidor, com nomes diferentes (é isso?).
  12. Bom dia Fernando, Qual a quantidade de dados que irá copiar? Algumas tabelas ou a base toda? Se for algumas tabelas: Os BD´s estão no mesmo Servidor? Se tiver, pode-se criar uma tabela temporária, copiar os dados e inserir na tabela do outro BD (utilizando o comando USE NomeBancoDados para alterar o base). Se tiver em servidores separados, utilizar um linked server. Ou então implementar uma SSIS.
  13. Bom dia Martin, Não conheço nenhuma forma de restore de uma base full, pegando apenas as estruturas... :.( Mas você pode fazer um backup da seguinte forma: - Gere um script do BD (Management Studio, vá no Banco, clique com o botão direito, Tasks, Generate Scripts). - Crie um novo BD com o script gerado. - Faça o backup dele. Ou então faça o restore, apague os dados e faça o backup (antes de fazer, verifique o tamanho do BD).
  14. Bom dia Amigo, Manipular strings no sql é sempre complicado. Nestes casos, prefira sempre modelar a base de forma em que as informações sejam separadas, para que não tenha trabalho deste tipo. As vezes pegamos sistemas já prontos com estas bombas.... aí é só chorar mesmo... rs. Mas vamos ao que interessa!! Quais os comandos utilizados: - charindex: retorna o indice (ponto) da string em que foi encontrado o caracter. Caso você pesquise na sua string o espaço, ele retornará a primeira posição que encontrá-lo (no exemplo, a posição 4), começando da esquerda para a direita. - substring: resgata "pedações" da sua string. - ltrim: retira espaços em branco no começo da string. Criei umas variávies para que visualize melhor o resultado. Copie o script, cole e mande executar tudo. Para fazer mais testes, basta alterar os valores da variável @Endereco. OBS.: As posições estão demarcadas pela forma em que a string foi gravada: rua ESPAÇO antonio VIRGULA ESPAÇO 0000 ESPAÇO qu 2 Cuidado com isto, pois caso tenha alguma alteração na forma de gravação do string, a manipulação pode não retornar o valor desejado!! Qualquer dúvida, pode postar... :.) Declare @Endereco varchar(100) Declare @Logradouro varchar(100) Declare @Numero int Declare @Complemento varchar(20) Set @Endereco= 'rua antonio, 000 qu 2' Set @Logradouro = (ltrim(substring (@Endereco, charindex(' ',@Endereco), (charindex(',',@Endereco)-charindex(' ',@Endereco))))) Set @Endereco = substring (@Endereco, charindex(',',@Endereco), len(@Endereco)) Set @Endereco = ltrim(substring (@Endereco, charindex(' ',@Endereco), len(@Endereco))) Set @Numero = (ltrim(substring (@Endereco, 1,charindex(' ',@Endereco)))) Set @Complemento = (ltrim(substring (@Endereco, charindex(' ',@Endereco), len(@Endereco)))) select @Logradouro, @Numero, @Complemento
  15. Seja bem vinda!! Off: gostei do nick. Assassinos por Natureza. Pra mim um clássico!! :.)
  16. fulvio

    Consulta SQL

    Boa tarde Amigo, No SELECT você referência os campos: uplanoaula.data, uplanoaula.idaula, uplanoaula.codmat, min(edefhor.horini), max(edefhor.horfim) No GROUP BY: edefhor.horini,edefhor.horfim,uplanoaula.data,uplanoaula.idaula,uplanoaula.codmat Provavelmente o script não está retornado o resultado desejado por causa do Group By. No exemplo você agrupa pelos campos "uplanoaula.idaula" e "uplanoaula.codmat". Perceba que no resultado eles realmente estão agrupados (1 e 2; 271 e 197 respectivamente). Retire os dois campos do Select e do Group By e rode novamente o script. Provavelmente retornará o resultado desejado. Caso não retorno, verifique os campos que utilizou no agrupamento. OBS.: você só não pode tirar do group by os campos que você referencia no select. Se estes campos não puderem ser excluidos do resultado, pode-se tentar fazer um subselect. Qualquer dúvida, pode postar.
  17. fulvio

    Trabalho com querys

    Bom dia Bruno, É.... agora vou dar uma de PAI: não gosto de ajudar quando é trabalho, pois a pessoa está aprendendo e o mercado é cruel!!! A hora é esta meu amigo. As consultas relativamente são simples. Precisa de conhecer poucos comandos e o fundamental: lógica. Como não tenho dados para inserir nas tabelas, fiz os selects e não os testei. Dê uma olhada se eles retornarão as informações corretas. Fiz as consultas e expliquei. Entenda e estude bem!! Tem ai as provas finais e o MERCADO (este ai é uma prova todos os dias... rs). Vamos lá: 1º --> O seu join deve estar retornando um exponencial, pois possuia uma tabela referenciada e não havia o seu relacionamento na cláusula WHERE. Refeito: select v.chassi, v.placa,v.ano, c.descricao, m.descricao, f.razaosocial from veiculo v, cor c, modelo m, fabricante f where v.idcor = c.idcor and v.codmodelo = m.codmodelo and m.cnpj=f.cnpj order by v.chassi 2º --> O seu join ordenava por placa e chassi. O enunciado estava querendo o ultimo contrato. Ordenar pela data de inicio decrescente (do maior pro menor) e pegar o 1º registro lhe restornará o valor desejado. Se não for pela datainicio, só ordernar pela datafim. Refeito: select top 1 c.nºcontrato, c.datainicio, c.datafim, f.matricula, f.nome, v.chassi, v.placa from contrato c, funcionario f, veiculo v where c.matricula = f.matricula and c.chassi = v.chassi order by c.datainicio desc 3º --> Esse aí você nem mexeu... rs. Para somar a quantidade de contratos, você deve utilizar a função SUM. Esta função obriga a utilização do comando GROUP BY (caso tenha outras colunas sendo referenciadas além da coluna que será somada). Refeito: select f.matricula, f.nome, sum(c.nºcontrato) from funcionario f, contrato c where f.matricula = c.matricula group by f.matricula, f.nome order by f.matricula Dá uma olhada nestes scripts e vê se funciona. Qualquer dúvida, pode postar. :.)
  18. Fala Rogério, Os cursores em SQL são conhecidos como Ponteiros também. Não tem nada a ver com View. Um exemplo: Suponha que tenha uma tabela de Clientes. você quer pegar cada código de cliente e fazer qualquer manipulação. Daria pra fazer joins entre as tabelas, mas você quer Cliente a Cliente!! A forma mais simples é fazer um loop, ok? No SQL, você pode criar um Cursor (você pode colocar qualquer e quantas informações necessitar). Ai você lista, por exemplo, os códigos da empresa e seus nomes. Ao abrir o Cursor com estes dados, o SQL os armazenará em memória. Após isto, você conseguirá navegar pela "tabela", como se estivesse utilizando um ponteiro para cada linha (em linguagem de programação, é como se fosse uma navegação por índice). Voltando ao loop, você pode manipular este Cursor para realizar outras tarefas. No exemplo, manipular dados de Cliente por Cliente. Particularmente não gosto de Cursores, porque: - Utilizam muita memória (quanto mais colunas e dados, maior o espaço). - Tempo de processamento maior. Prefiro utilizar o famoso e velho WHILE. :.)
  19. rs... que isso. estou aprendendo igual a todos!! Só um comentário: ao fazer o update, você faz em massa. Não vale a pena você verificar cada campo. Se fizer isto, gastará muiiito tempo. rs. Estamos ai. Qualquer dúvida que tiver, pode postar!!! :.)
  20. Se o pessoal vai "logar" pelo Access, não vale a pena tentar acessar o sql apenas para autenticar o usuário. Uma idéia seria você armazenar os logins e senhas no SQL (em tabela), utilizando os comandos próprios do SQL para criptografia (aí você acessaria diretamente o sql). Após a validação, liberar o acesso. você encontra vários exemplos de criptografia boas na net. Caso fique dificil o que precisa, pode utilizar scripts para criptografar os dados. O que precisar é só postar!! Estamos aqui pra ajudar mesmo. Obrigado. :.)
  21. Entendi. Mas aí você está levando em consideração do dia 1. Porque se for fazer a diferença entre o dia 1 e o dia 2, o resultado será 1. :.) select Datediff(day, 01-01-2010, 02-01-2010) Pra levar em consideração o dia 1: select Datediff(day, 01-01-2010, 02-01-2010) + 1
  22. Boa tarde Diego, você quer a diferença em dias entre as datas? Não entendi o Resultado = 2. No caso da data de exemplo, o formato é dd-mm-aaaa?
  23. Boa tarde Amigo, A forma de acesso aí dependerá da linguagem que utiliza. No seu caso, dá para utilizar o VBA. Não sei a forma que você utilizou para realizar a conexão entre Access e SQL. O mais conhecido e utilizado é o Linked Server do SQL. você cria e consegue acessar/manipular dados em outras bases. O link abaixo possui explicações e exemplos: http://www.devmedia.com.br/articles/viewcomp.asp?comp=5739
  24. O básico você já sabe... agora é só colocar em prática.... rs. Fiz um exemplo pra entender melhor. Neste exemplo, crio fisicamente duas tabelas: ClienteBase1 e ClienteBase2. Insiro alguns dados e depois faço a compatibilização. Na compatibilização, crio uma tabela auxiliar para armazenar o nome das colunas. Ai faço um loop para conferir os dados de todas as colunas. Dá uma olhada e vê se entende. Entendendo, aí fica fácil de adaptar. O exemplo está comentado. Só mais uma coisa: se as bases estiverem no mesmo Servidor, basta utilizar o comando USE NomeBD para alterar o BD. Caso esteja em servidores diferentes, terá que fazer um Linked Server para isto. Qualquer dúvida, pode postar. -- Criação das tabelas create table ClienteBase1 (Codigo int, Nome varchar(50), Comentario varchar(50)) create table ClienteBase2 (Codigo int, Nome varchar(50), Comentario varchar(50)) -- Inserção dos dados na Base1 insert into ClienteBase1 values (100, 'Nome Teste 1', 'Este comentario do Cliente 1 foi alterado') insert into ClienteBase1 values (101, 'Nome Teste 2', 'Comentario do Cliente 2') insert into ClienteBase1 values (102, 'Nome Teste 3', 'Comentario do Cliente 3') -- Inserção dos dados na Base2 insert into ClienteBase2 values (100, 'Nome Teste 1', 'Comentario do Cliente 1') insert into ClienteBase2 values (101, 'Nome Teste 2', 'Comentario do Cliente 2') insert into ClienteBase2 values (102, 'Nome Teste 3', 'Comentario do Cliente 3') -- Verificação select * from ClienteBase1 select * from ClienteBase2 -- Criação da tabela auxiliar. Tabela existe enquanto a instância existir. create table #Colunas (Coluna varchar(50), Controle int identity) -- Inserção dos Dados insert into #Colunas select c.name from sysobjects o, syscolumns c where o.name='ClienteBase1' and o.id=c.id -- Verificação select * from #Colunas -- Declaração de variaveis. Selecionar e rodar até o **** Declare @Sql varchar(255) Declare @Coluna varchar(50) Declare @Contador int -- Setando o contador para utilizar com o campo Controle Set @Contador = 1 -- Atribuindo o nome da coluna à variavel Set @Coluna = (select Coluna from #Colunas where controle=@Contador) -- Repetir enquanto o Contador for menor que o quantidade de colunas While @Contador <= (select max(controle) from #Colunas) Begin -- Montagem do update Set @Sql = ('update ClienteBase2 set ' + @Coluna + '=b1.' + @Coluna + ' from ClienteBase1 b1, ClienteBase2 b2 where b1.codigo=b2.codigo') exec (@Sql) -- Incremento do contador Set @Contador = @Contador + 1 -- Pegando a próxima coluna Set @Coluna = (select Coluna from #Colunas where controle=@Contador) End --Rodar até aqui **** -- Verificação select * from ClienteBase1 select * from ClienteBase2
×
×
  • Criar Novo...