Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. Bom dia Gilberto, A sua consulta está demorando por causa da quantidade de subselects que está fazendo. Quando você roda esta consulta, o sql aguarda o resultado de todos os subselects para remontar o select principal. Isso faz com que o tempo fique realmente muuuuito alto. Tente retirar os subselects, fazendo apenas um select. Se não der, tente fazer passo a passo a consulta, utilizando temporárias.
  2. Bom dia Danleon, O string se conexão você fará no fonte. Moverei o tópico para o Fórum de VB.
  3. Não entendi a dúvida. você quer criar um Banco de Dados utilizando a "conexao" criada?
  4. Bom dia Luiz, Jeito tem.... rs. No sql temos a tabela SysObjects e SysColumns. Estas contém basicamente as tabelas e as colunas do sistema (basicamente porque a SysObjects possuem mais objetos do que apenas as tabelas). Daria para você identificar as tabelas, juntamente com suas colunas (com seus tipos) e fazer um script dinâmico para pesquisa. Teria que identificar qual o dado que seria de pesquisa (inteiro, caracter, data) para pesquisar nas colunas correspondentes. O problema seria a performance.... teria q vasculhar as colunas de várias tabelas e, com certeza, a grande maioria não é indexada.
  5. Se você não colocar junto, poderá colocar na mão mesmo. Se for enviar para o cliente, teria que ser no Pack mesmo, para que tudo seja transparente.
  6. Bom dia, Não necessariamente precisa ser na mesma pasta. Coloque o caminho de acesso à Base.
  7. Rs... mais um com XP... \o/ \o/ \o/ você conseguiu abrir o Management? Se conseguiu, procure pelo atalho "Object Explorer". Abra as opções do seu Servidor. Terá o arquivo DataBases. Clique com o botão da direita e esolha "New DataBase".
  8. Boa tarde Raul, - Management Studio / Nome do Banco de Dados. - Botão direito do mouse em cima do Nome do BD / Propriedades. - Opção Transaction Log Shipping. Seria isto que está procurando?
  9. Bom dia Felipe, Demorou mas achei o post antigo (que comentei acima). Dá uma olhada... http://scriptbrasil.com.br/forum/index.php?showtopic=148246
  10. fulvio

    Pl/Sql

    Bom dia Dimac, Moverei seu post para o Forum correto.
  11. Boa tarde Felipe, Uns posts mais antigos fiz uma listagem de passos que poderiam ser adotados para tentar diminuir o tamanho do Banco. Uma coisa importante e as vezes as pessoas não se atentam: quando se cria a Base, você fala qual o tamanho da mesma, e como irá "crescer" (pode ser em KB ou em %). Sendo assim, se eu crio uma Base que tenha um tamanho de 10 GB (a mesma pode ter pouquissimos dados), mas o tamanho não mudará. Ao preencher os 10 GB, a Base loca mais espaço de acordo com a configuração de criação --> se colocou 10%, a mesma crescerá de 1 em 1 GB.
  12. fulvio

    Dados Excel

    Quando você mexer, nunca mais vai querer fazer de outra forma... rs.
  13. fulvio

    consulta - iniciante

    Bom dia Cissa, Se passar o vendedor, retornará os clientes relacionados a este vendedor (o certo é já passar o código do vendedor): select c.Cliente from clientes c, clientes_vendedores cv where cv.codVendedor=SELECAO_COD_VENDEDOR and cv.codCliente=c.codCliente Agora você quer pegar, depois do resultado dos clientes acima, os vendedores relacionados a cada um dos clientes? select distinct v.Vendedor from vendedores v, clientes_vendedores cv where cv.codVendedor=c.codVendedor and cv.codCliente in (select c.Cliente from clientes c, clientes_vendedores cv where cv.codVendedor=SELECAO_COD_VENDEDOR and cv.codCliente=c.codCliente) No primeiro select, se não der pra passar o código do Vendedor, aí terá que referenciar a tabela Vendedor para pegar o código: select c.Cliente from clientes c, vendedor v, clientes_vendedores cv where v.NomeVendedor=NOME_VENDEDOR and cv.CodVendedor=c.CodVendedor and cv.codCliente=c.codCliente
  14. fulvio

    Dados Excel

    Boa tarde Felipe, O Import and Export é a maneira mais simples de se fazer isto. É identificar as Bases, ticar as colunas que deseja manipular e mandar executar. Mas se tiver realmente utilizar o BULK INSERT.... http://msdn.microsoft.com/en-us/library/ms188365.aspx
  15. Bom dia meu Velho, você pode implementar um JOB para ser exeutado todo dia. O nivel='30' seria a quantidade de dias que o usuário tem acesso? Se for, prefira colocar uma Data. Assim, você consguirá fazer a diferença entre a "Data Corrente" e a "Data de Ativação". Se a diferença for maior que 30 dias, retire o acesso. O JOB pode ser agendado para rodar qualquer dia / hora. Assim poderá por exemplo, colocar todo dia de madrugada para executar o processo.
  16. fulvio

    Consulta

    Bom dia Sims, O select que postou: Select nome_cliente, dt_pedito from cliente left outer join pedido on codcli = cod_cliente order by nome_cliente É exatamente igual ao exemplo que postei: select nome_cliente, dt_pedito from cliente left join pedido on codcli = cod_cliente Perceba que não possui a sintaxe OUTER, pois a mesma pode ser suprimida. Expliquei que a sintaxe *= ou =* será descontinuada: "você pode utilizar a sintaxe *= ou =* - especificação Ansi 92. Mas a partir do SQL2005, estas implementações estão descontinuadas." você pode sim alterar o nível de compatibilidade do SQL, mas sua performance diminuíra, pois o SQL realiza internamente a conversão da sintaxe.
  17. fulvio

    Diferenca entre datas

    Bom dia Rafa, No Sql existe a função DATEDIFF. você passa as dastas e identifica como será o retorno. Ex.: SELECT DATEDIFF (mi, '2010-11-16 08:00', GETDATE()) Neste caso, o retorno será em minutos. Caso queira em horas, trocar o "mi" por "hh".
  18. Boa tarde João, Não percebi que havia uma variável dentro da string de execução. É isto aí que fez. OBS.: Caso a variável seja inteira, dará erro pois o sql identificará a sintaxe "+" como sendo uma adição. Aí é só utilizar o CAST para converter pra VARCHAR. Aí irá funcionar. De nada. Precisando estamos aí. :.)
  19. Tenta fazer esta forma: CREATE PROCEDURE [dbo].[VERSAO_MSSQL]( @Codigo VARCHAR(10) ) as BEGIN declare @VersaoSQL VARCHAR(4), @SQL VARCHAR(1500) SELECT @VersaoSQL = CAST(SERVERPROPERTY('productversion') AS VARCHAR) IF @VersaoSQL = '8.00' BEGIN SELECT Nome, Senha FROM MinhaTabela WHERE Codigo = @Codigo END ELSE BEGIN Set @SQL = 'OPEN SYMMETRIC KEY MinhaChave DECRYPTION BY CERTIFICATE ChaveSimetrica; ' + 'SELECT Nome, convert(VARBINARY(300), decryptbykey(Senha)) as Senha ' + 'FROM MinhaTabela ' + 'WHERE Codigo = @Codigo' EXEC (@SQL) END END
  20. Bom dia João, Qual o complemento q está utilizando que não existe nas versões anteriores do 2005? O que pode fazer é gerar o script dinamicamente. O problema é que se o script for grande, fica muito ruim a implementação (complicado). Ex.: DECLARE @SQL VARCHAR(100) SET @SQL = ('SELECT getdate()') EXEC (@SQL)
  21. Boa tarde Felipe, Pra criar uma Procedure, basta colocar o script abaixo antes do Update: CREATE PROCEDURE dbo.TestedeProcedure as Mas para garantir a execução dos dois comandos, deverá utilizar o BEGIN TRAN e COMMIT TRAN. Caso não saiba, seria interessante pesquisar na net algumas explicações e exemplos. OBS.: o seu script possui muitos subselects. O interessante seria tentar fazer os relacionamentos diretos entre as tabelas. Perceba que está utilizando o INNER JOIN chamando um subselect. Em termo de performance é muito ruim.
  22. Boa tarde Felipe, Para ver se os valores se repetem, você terá que fixar um a um e ir comparando. No seu exemplo, os Grupos estão em ordem crescente. Caso, na tabela principal não esteja nesta ordem, será necessário criar uma tabela temporária e inserir os dados ordenados. Será necessário também criar uma coluna Indetity para controle. Dá uma olhada no exemplo que diz e vê se é isso que precisa. O código está comentado. -- Sua tabela create table #Tmp (CO INT, CR int, Grupo INT, Controle INT IDENTITY) -- Inserção dos dados INSERT INTO #tmp VALUES (1, 2, 1) INSERT INTO #tmp VALUES (2, 3, 2) INSERT INTO #tmp VALUES (5, 7, 3) INSERT INTO #tmp VALUES (6, 7, 3) INSERT INTO #tmp VALUES (9, 10, 4) INSERT INTO #tmp VALUES (9, 11, 5) INSERT INTO #tmp VALUES (14, 16, 6) INSERT INTO #tmp VALUES (15, 16, 6) INSERT INTO #tmp VALUES (16, 17, 7) INSERT INTO #tmp VALUES (16, 18, 8) INSERT INTO #tmp VALUES (16, 19, 9) -- Selecionar daqui até no fim. DECLARE @ValorCO INT DECLARE @ValorCR INT DECLARE @Contador INT DECLARE @MenorGrupo INT SET @Contador = 1 WHILE @Contador <= (SELECT MAX(Controle) FROM #Tmp) BEGIN SET @ValorCO = (SELECT top 1 co FROM #Tmp WHERE Controle=@Contador) SET @ValorCR = (SELECT top 1 cr FROM #Tmp WHERE Controle=@Contador) DELETE #Tmp WHERE CO=@ValorCO AND Controle<>@Contador DELETE #Tmp WHERE CR=@ValorCR AND Controle<>@Contador DELETE #Tmp WHERE CR=@ValorCO AND Controle<>@Contador DELETE #Tmp WHERE CO=@ValorCR AND Controle<>@Contador SET @Contador = @Contador + 1 END -- Conferência dos dados select * from #Tmp
  23. Bom dia Alex, Dê uma olhada no COLLATE que está utilizando. você poderá forçar a troca do COLLATE quando for enviar o email.
  24. Boa tarde Gadelha, Perceba que na tabela Gente possui mais campos do que a tabela Crianca. Sendo assim você terá que referenciar quais as colunas deverão receber os valores. Ex.: insert Labs.dbo.gente (cod_gente, nome_gente, sexo_gente, serie_gente) select cod_cri,nome_cri,sexo_cri,serie_cri from Aula.dbo.crianca
  25. fulvio

    EFD - Ler arquivo

    Bom dia Romani, Rs... vamos lá. Se quiser fazer outra tabela conforme postado, poderá fazer a separação utilizando a coluna Info1. você pode fazer um insert testando se ó valor contido não é numérico. Fica simples e rápido de fazer a nova tabela. Mas voltando ao problema, postei logo abaixo um script que imprime as PK´s. Criei uma tabela com os dados, para simular a sua. Dei um print no resultado, para conferência. O script está comentado. Dê uma olhada se é isto que precisa. Caso seja, aí é só fazer as adaptações. Espero que ajude!! :.) -- Criação de tabela. CREATE TABLE #Dados (Pk INT, Tipo VARCHAR(15), Info1 VARCHAR, info2 int) -- Inserção dos dados INSERT INTO #dados VALUES (1, 'C100', '1', 1000) INSERT INTO #dados VALUES (2, 'C110', 'A', 500) INSERT INTO #dados VALUES (3, 'C110', 'B', 500) INSERT INTO #dados VALUES (4, 'C100', '2', 1000) INSERT INTO #dados VALUES (5, 'C110', 'A', 1000) INSERT INTO #dados VALUES (6, 'C100', '3', 1000) INSERT INTO #dados VALUES (7, 'C110', 'A', 500) INSERT INTO #dados VALUES (8, 'C110', 'B', 500) -- Conferência SELECT * FROM #Dados -- Seleciona daqui pra baixo a manda executar tudo. DECLARE @Contador INT DECLARE @PK INT DECLARE @UltimaPK INT DECLARE @Tipo VARCHAR(15) SET @Contador = 1 IF @Contador = 1 BEGIN SET @PK = (SELECT Pk FROM #Dados WHERE pk=@Contador) SET @UltimaPK = @PK PRINT 'PK=' + CAST (@PK AS VARCHAR(100)) SET @Contador = @Contador + 1 END WHILE @Contador <= (SELECT MAX(PK) FROM #Dados) BEGIN SET @Tipo = (SELECT tipo FROM #Dados WHERE pk=@Contador) IF @Tipo <> 'C100' BEGIN SET @PK = @UltimaPK END ELSE BEGIN SET @PK = (SELECT Pk FROM #Dados WHERE pk=@Contador) SET @UltimaPK = @PK END PRINT 'PK=' + CAST (@PK AS VARCHAR(100)) SET @Contador = @Contador + 1 END
×
×
  • Criar Novo...