Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. Se tivesse utilizando o Mysql, poderia utilizar a funcionalidade OUTFILE. Como é SQL Server, terá q ser via DTS.
  2. Bom dia Anderson, Qual versão do SQL q está utilizando? você terá q fazer um Linked Server entre as bases. Após este trabalho, basta criar o relacionamento entre as tabelas. Esta é a forma mais simples. Caso não tenha como fazer o Linked Server, você pode importar a tabela de um banco para outro, gravando os dados em uma tabela temporária (NomeTabela, NomeTabelaTMP), com as mesmas estruturas, mudando apenas o nome. Faz um select entre elas, inserindo os dados de uma, que não exista na outra, ok? Qualquer duvida pode postar ai... :.)
  3. Bom dia Flávio, O comando sp_help é utilizado no Query Analyzer para visualização da estrutura da tabela. Para ser utilizado em alguma cláusula, não funciona. você gostaria de pesquisar se a tabela possui índice, e depois fazer o q? A pesquisa de criações de índices é um trabalho feito pontualmente, tabela por tabela. Nem todas as tabelas precisarão de índices. Eles são de grande importância, mas uma quantidade grande nas tabelas, terá sua performance penalizada.... Um trabalho interessante de se fazer é resgatar do código fonte todos os SELECT´s utilizados (tem na web aplicativos q fazem esta pesquisa). Após a pesquisa, ver a quantidade de vezes (ocorrências) q as tabelas são referenciadas nestes select´s. Na cláusula WHERE, será identificada as chaves de ligações entre as tabelas. Teoricamente, estas chaves devem ser primárias, estrangeiras ou indexadas. Caso uma consulta utilize uma chave de relacionamento q não seja primária, estrangeira ou indexada, será interessante rever este relacionamento. Caso este relacionamento esteja OK, rever a estrutura do BD (chaves ou indices). Espero ter ajudado. Qualquer dúvida pode postar ai... :.)
  4. fulvio

    VB para SQL Server

    Olá Menezes. Sim, tem como migrar o sistema pro SQL Server. Não entendi o porque você tem q fazer tantas instalações pro aplicativo rodar.... o VB, Cristal e Acess tudo bem.... mas achei muito a quantidade de versões... rs. No caso de apenas trocar o BD, creio q as instalações dos outros aplicativos continuarão da mema forma. O q pode ser feito é identificar os objetos q estão sendo utilizados nas versões do VB e substiruir. No caso so Cristal, substituir pelo DataReport do VB (o VB6 sei q tem... teria q pesquisar se o 4 ou 5 possuem a ferramenta). No caso das unidades F e G, seriam redireionamentos. Assim teria apenas o VB e o SQL...
  5. utilize a função "sp_help". Ex.: sp_help NomeTabela Ou então digite o nome da tabela, selecione e aperte ALT + F1.
  6. você tendo o resultado junto, basta separar e vice-versa. JUNTO: select data as DT_REL, Month(dns) as MES_DT_REL, DATEadd(Month, -1, dns) as DT_REL_ANT, (Month(dns))-1 as MES_DT_REL_ANT from aluno SEPARADO: DT_REL = (select data as DT_REL from aluno) MES_DT_REL = (select Month(dns) as MES_DT_REL from aluno) DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from aluno) MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from aluno) OBS: se você criar uma varivável DT_REL, o select tem q retornar apenas 1 valor, ok? você pode passar os resultados juntos para o aplicativo, e nele separar também.
  7. No meu perfil tem o MSN... mas encaminhei por email pra você. Espero q ajude...
  8. select data as DT_REL, Month(dns) as MES_DT_REL, DATEadd(Month, -1, dns) as DT_REL_ANT, (Month(dns))-1 as MES_DT_REL_ANT from aluno Faz o teste aí. Caso não seja isso, pode postar ai!!
  9. Achei um documento na net sobre DTS. São 24 páginas de Word... Se quiser, me add no MSN q te passo.
  10. É, infelizmente esta área é bem vasta e complicada... A lentidão de uma pesquisa pode ser conseqüência de vários fatores. Alguns problemas: - Servidora não suporta quantidade de processos (concorrência entre usuários) - Processos pesados - Pesquisas de campos que não sejam chaves ou não possuam índices - Modelagem do Banco - Relacionamento entre as tabelas (sejam inexistentes ou demasiados) - Dependendo da arquitetura, pode ser rede ou problemas que não estejam necessariamente na aplicação / Servidor - A máquina do cliente (dependendo da arquitetura) - Tabelas: grandes demais (precisando de expurgo), “clusterizadas” sem necessidade, muito concorrida, com grande quantidade de inserções (recriação de índices) - Forma de escrever a pesquisa (padrão ANSI) Uma pesquisa boa é fazer um “trace” e ver qual ou quais os processos estão “pesando” a base de dados. Mas lembre-se que esta pesquisa consome bem o processamento da servidora :.)
  11. Boa tarde Flavio... você encontra na net muitos exemplos de exportação de dados utilizando não apenas DTS, mas também funções como OpenRowSet e Bulk Insert... Quanto aos tratamentos dos dados, aconselho primeiramente importar os dados para a Base, utilizando uma tabela de transporte. Após a exportação, realizar os tratamentos necessários nesta tabela de transporte e após todos os tratamentos, inserir os dados na tabela de “trabalho”. http://msdn.microsoft.com/pt-br/library/ms188365.aspx Quanto ao item 4: no script da exportação/manipulação dos dados, você pode gravar a data/hora do início da execução. Logo após o término, grava-se novamente a data/hora. Ex.: Insert into TabelaControle (Inicio) values (getdate()) BULK INSERT .... ... processo de tratamento dos dados ... Insert into TabelaControle (Fim) values (getdate()) Insert into TabelaControle (Total) select count(campo) from tabela Caso você faça em DTS, a mesma estrutura poderá ser criada. Espero ter ajudado.
  12. Boa tarde Amigo!!! Ao invés de: exec store_procedure(0,'aaa',9, '3,4,5,6',2) Tente assim: exec store_procedure 0,'aaa',9, '3,4,5,6',2 Faz um teste ai e depois me fala se seu certo, ok?
  13. Bom dia Alberto, O que identifiquei de errado seria o mesmo postado pelo Kuroi. Ou você colocado no substring de 0 a 25 ou de 1 a 24. O que pode estar dando problema é quando você passa o valor para a varíavel que utiliza (BaseCobranca). Pode estar passando um valor diferente do número... Dá uma olhada no exemplo abaixo: create proc dbo.Modulo10 @base varchar(24) as if @base='000000001567601401736863' select 'OK' + ' - ' + @base Else select 'Erro' + ' - ' + @base dbo.modulo10 '000000001567601401736863' declare @BaseCobranca varchar(24) set @BaseCobranca = '000000001567601401736863' set @BaseCobranca = SUBSTRING(@BaseCobranca, 0, 25) exec dbo.Modulo10 @BaseCobranca
  14. você está dando um select na variável, ao invés de executar. Coloquei um exemplo logo abaixo... create proc dbo.teste as select '158' declare @my_query varchar(255) set @my_query = 'Teste' exec (@my_query)
  15. Bom dia Amigo. Não sei se entendi a sua dúvida direito, mas vamos lá... Quando preciso do valor de retorno de alguma procedure, faço a seguinte implementação. Na procedure: Alter Proc dbo.PRC_URA_CONSULTA_CHAMADOS @Retorno Integer OutPut, @init_date AS DATETIME, @end_date AS DATETIME, @analista AS VARCHAR(50), @id_ilhas AS INT As ... Pra atribuir o valor de retorno em alguma variável: Declare @Retorno Integer Exec dbo.PRC_URA_CONSULTA_CHAMADOS @Retorno OutPut Select @Retorno As Retorno Faz as alterações e testa aí... caso tenha alguma dúvida, posta aí. :.)
  16. Os caracteres estranhos que estão aparecendo são notações científicas. você está com o SQL 2005, não é? Já tentou utilizar o "SQL Business Intelligence Development Studio" para fazer a importação dos dados? Na planilha do excel, tem apenas dados de CPF? Caso positivo, você pode copiar os dados e colar em um TXT, e tentar realizar a importação novamente... Se tiver alguma dúvida, estarei on no MSN a tarde... daasabh@hotmail.com
  17. Bom dia Amigo. Este problema está ocorrendo porque o campo criado no SQL é numérico. Sendo assim, os zeros a esquerda são suprimidos. Mesmo você fazendo um loop pra inserir os zeros, não conseguirá. você terá q alterar o campo de numérico para caracter. Asism resolverá seu problema na migração mesmo, onde os zeros a esquerda não serão mais suprimidos. Caso tenha alguma duvida ou problema, posta aí!!! Espero ter ajudado.... :.)
  18. Boa tarde Carolina, Sinceramente não consegui resolver utilizando apenas 1 select... :.( Criei uma temporária onde insiro os telefones com distinct. Após inserção, "updato" os campos. Como a inserção foi realizada utilizando o distinct, os telefones não serão duplicados. Abaixo estão as temporárias q criei com os dados de exemplo e inserindo na tabela de resultado. você pode alterar a criação da tabela de # para @ (tempo de execução - tem q trocar a sintaxe de declaração da mesma). Espero ter ajudado. Qualquer problema, posta ai... :.) -- Criação de tabela create table #dados (NOME_CLIENTE varchar(80), ENDERECO varchar(80), TELEFONE int, CPF varchar(13)) create table #Tabela (NOME_CLIENTE varchar(80), ENDERECO varchar(80), TELEFONE int, CPF varchar(13)) -- Inserção dos dados insert into #dados (NOME_CLIENTE, ENDERECO, TELEFONE, CPF) values ('MARIA DA SILVA' , 'RUA DO SABÃO 23, 505' , 12345678 , '123.456.789-0') insert into #dados (NOME_CLIENTE, ENDERECO, TELEFONE, CPF) values ('JOSE DE SOUZA' , 'RUA 13 48, CASA 2' , 12345678 , '987.654.321-0') --select * from #dados -- Inserção dos telefones, sem repetição insert into #tabela (Telefone) select distinct telefone from #dados -- inserção das demais informações update #tabela set NOME_CLIENTE=d.NOME_CLIENTE, ENDERECO=d.ENDERECO, CPF=d.CPF from #tabela t, #dados d where t.Telefone=d.Telefone select * from #tabela
  19. Boa tarde. É... o problema q estou vendo ai será a quantidade. A manipulação de caracteres em geral é sempre bem pesada. você pode gerar uma função ou procedure q altere os caracteres pra você. Caso você opte por alterar a base toda, corre o risco do processo não conseguir terminar.... :.( Isto por causa da quantidade de inserções q terão q ser manipuladas. Aconselho fazer uma estatística de execução pra saber qual o tempo q gastará pra realizar as manipulações. Dependendo do resultado, a idéia já é descartada. você acabará tendo q realizar esta manipulação on line, quer dizer, na hora da emissão da NFe... Se tiver alguma dúvida, pode postar!! :.)
  20. Bom dia Monteiro. Instale o SQL Server, crie o Banco de Dados e migre todas as tabelas q a empresa possui em pastas, para tabelas. Se na empresa já tiver instalado o SQL, basta criar o banco. Qual o SQL q será instalado?
  21. Bom dia Felipe. Não sei se você conhece a funcionalidade try-catch... o sql também a possui. Caso queira fazer um tratamento de erro, pode utilizar esta funcionalidade. No caso dos campos NR_CPF e NR_CNPJ que são unique, você terá q verificar se já estão inseridos. O interessante seria você deixar estas verificações para o aplicativo fazer. Ai você terá q levar em consideração a quantidade de acessos q fará na base. Caso fique muito grande, faça uma função (ou procedure) que realize todos as verificações possíveis. Caso a função (ou procedure) retorne OK, você chama a procedure de inserção dos dados. Espero ter ajudado... :.) Qualquer dúvida q tiver, pode postar ai.
  22. Boa tarde Marcelo. Não sei se entendi direito, mas vamos lá... você pode agrupar pelo campo "nome" e "controle" e utilizar o "having" para fazer os dois filtros q precisa. EX: select nome, controle from SUA_TABELA where ... group by nome, controle having count(nome)>1 and controle='R' Caso não dê certo ou tenha alguma dúvida, posta ai!! :.)
  23. É Felipe... o bom q estas coisas fazem a gente pensar. Assim q se aprende e nunca mais esquece!!! rs... Desta vez, a culpa foi minha. Desculpa. :.( Quando te passei o script de teste de erro: IF @@ERROR > 0 BEGIN ROLLBACK TRAN RETURN END O problema q esqueci de colocar a hora de "comitar" o processo: IF @@ERROR > 0 BEGIN ROLLBACK TRAN RETURN END ELSE COMMIT TRAN Publica aí e vê se roda. Qualquer coisa, estamos ai... Agora vai \o/
  24. Rs... Fala Felipe!! O erro continua, porque você não o corrigiu!!! Hehehe. No IF q você refez: IF ( SELECT DS_TIPO FROM TB_CADASTROP WHERE DS_TIPO = 1) BEGIN - O resultado do select tem q retornar apenas um valor (senão vai dar erro). - você tem q pegar o valor q o rapaz digitou. No select você terá q resgatar o número q foi digitado. - Depois q fechar o parêntese você faz a comparação. Ex: IF ( SELECT DS_TIPO FROM TB_CADASTROP WHERE codigo=@codigo) = 1 BEGIN Altera na sua estrutura. DE: ...... INSERT INTO TB_CADASTROP (DS_NOME, DS_EMAIL, DS_RG, NR_TELEFONE, DS_TIPO) VALUES (@NOME, @EMAIL, @RG, @TELEFONE, @TIPO) IF ( SELECT DS_TIPO FROM TB_CADASTROP WHERE DS_TIPO = 1) BEGIN SET @CODIGO = (SELECT MAX(CD_PESSOA) FROM TB_CADASTROF) INSERT INTO TB_PESSOAF (CD_PESSOA, NR_CPF, DT_NASCIMENTO, TP_SEXO, TP_PROFISSAO) VALUES (@CODIGO, @CPF, @NASCIMENTO, @SEXO, @PROFISSAO) ...... PARA: ...... INSERT INTO TB_CADASTROP (DS_NOME, DS_EMAIL, DS_RG, NR_TELEFONE, DS_TIPO) VALUES (@NOME, @EMAIL, @RG, @TELEFONE, @TIPO) SET @CODIGO = (SELECT MAX(CD_PESSOA) FROM TB_CADASTROF) IF ( SELECT DS_TIPO FROM TB_CADASTROP WHERE CD_PESSOA = @CODIGO) = 1 BEGIN INSERT INTO TB_PESSOAF (CD_PESSOA, NR_CPF, DT_NASCIMENTO, TP_SEXO, TP_PROFISSAO) VALUES (@CODIGO, @CPF, @NASCIMENTO, @SEXO, @PROFISSAO) ...... Qualquer problema, posta ai... :.)
  25. Boa tarde Felipe. Pensei q não tinha mais nenhuma dúvidas!!! rs.... Como você recupera o campo DS_TIPO_PESSOA? Achei meio estranho a estrutura “IF ( SELECT DS_TIPO = 1)”. O problema está exatamente nesta estrutura. Na cláusula IF, você tem q comparar uma coisa com outra. Neste IF, você não realiza esta comparação. Alterei o seu script, alterando o inicio da transação. Depois apenas texto se deu erro. Caso negativo, “comito”. No script coloquei onde está o problema. Ai você altera aí!!! :.) Qualquer problema, posta ai... CREATE PROCEDURE SP_INSEREDADOS_1 -- DECLARAÇÃO DAS VARIAVEIS @CODIGO int = null, @NOME varchar(200), @EMAIL varchar(200), @RG varchar(9), @TELEFONE numeric(14), @TIPO numeric(1), @CPF integer, @NASCIMENTO numeric(11), @SEXO char(1), @PROFISSAO varchar(200), @CNPJ numeric(14), @NOMEEMP varchar(200), @INSCRICAO varchar(30), @ORDEM char(1) AS IF (@ORDEM) = 'i' -- insere registros nas tabelas. BEGIN IF EXISTS (SELECT DS_RG FROM TB_CADASTROP WHERE DS_RG = @RG) BEGIN SELECT 'RG já CONSTA NO CADASTRO, NÃO PODENDO SER DUPLICADO' RETURN END END ELSE BEGIN TRAN BEGIN INSERT INTO TB_CADASTROP (DS_NOME, DS_EMAIL, DS_RG, NR_TELEFONE, DS_TIPO) VALUES (@NOME, @EMAIL, @RG, @TELEFONE, @TIPO) IF ( SELECT DS_TIPO = 1) = 1 -- aqui você deve fazer a comparação, ok? Mas se você deixar o select assim, o resultado sempre será positivo, pois o resultado do select será sempre 1. Muda ai. BEGIN SET @CODIGO = (SELECT MAX(CD_PESSOA) FROM TB_PESSOAP) INSERT INTO TB_PESSOAF (CD_PESSOA, NR_CPF, DT_NASCIMENTO, TP_SEXO, TP_PROFISSAO) VALUES (@CODIGO, @CPF, @NASCIMENTO, @SEXO, @PROFISSAO) END ELSE BEGIN SET @CODIGO = (SELECT MAX(CD_PESSOA) FROM TB_PESSOAP) INSERT INTO TB_PESSOAJ (CD_PESSOA, NR_CNPJ, DS_NOME_EMP, DS_INSCRICAO_EST) VALUES (@CODIGO, @CNPJ, @NOMEEMP, @INSCRICAO) END END IF @@ERROR > 0 BEGIN ROLLBACK TRAN RETURN END
×
×
  • Criar Novo...