Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. rs... diferença boa. De tempos em tempos é sempre bom recriar o indice. Quando a tabela possui muita manipulação, sua recriação deve ser com mais frequência. O certo seria você criar um plano de Manutenção. Dê uma olhada na documentação da Microsoft. Há várias funções no sql que podem ser utilizadas para analise de indices em tabelas. :.)
  2. Boa tarde Diego, Cerca de 190 mil linhas para DB é relativamente pouco... rs. O que pode fazer para melhorar a performance é criar um índice para a view. Creio que isto deva melhorar significativamente a performance. Em alguns casos, pode-se clusterizar, mas cuidado: a clusterização diminui a performance de inserção e exclusão na tabela. Sendo assim, caso tenha muita manipulação dos dados na tabela, deve-se analisar o custo/beneficio, ok? Outra coisa: indice em uma view influencia diretamente a tabela referenciada. Faça os testes. O select não necessita das aspas simples antes da variável. Pode ser assim: SELECT codigo, nome from Vw_TbConsulta where nome like @nome +'%' No segundo script, pode-se tentar o order by pelo nome.
  3. Boa tarde Eder, Recuperar dados 100% é apenas em backup mesmo. O log armazena todas as transações do BD realmente, mas se o usuário realizou um comando como "delete"? O log identifica o comando, hora, quem fez, etc. Mas os dados apagados não tem como recuperar.... você pode ver a data do mdf e abrir o log para ver a data das transações. Aí tentar recuperar alguma coisa. Pelo menos terá uma noção de como os dados foram manipulados.
  4. Bom dia Gean, Não é este replace. Estou falando da função Replace do sql (sintaxe). Ex.: select replace('a@a.com.br,b@b.com.br,c@c.com.br', 'a@a.com.br,', '') Aí como deverá fazer para corrigir sua base: update TABELA set Coluna=(replace(Coluna, 'a@a.com.br,', ''))
  5. fulvio

    SQL Insert

    Bom dia Castelo, Q isso... estou aprendendo ainda... rs. A implementação está ok! Apenas uma observação: a função MAX + 1 poderá ser utilizada neste caso pois logo depois do incremento você dá o insert. Se retornasse o valor do incremento para o fonte, a função MAX + 1 não poderia ser utilizada. Motivo: caso você passasse o codRequisicao para o fonte, haveria um tempo (uma confirmação do usuário, ou processamento do aplicativo, etc) até a efetivação do insert. Neste meio tempo, uma outra chamada à procedure "CriarRequisicao" poderia ser executada, e retornaria o MAX + 1 desatualizado. Caso não tenha entendido, pode postar que explico com exemplos... :.)
  6. Boa tarde Gean, você pode utilizar o comando REPLACE do SQL. Aí substitui o email que deseja apagar por nada, ok? Se tiver dúvida, posta aí... :.)
  7. De nada. Precisando estamos ai!! :.)
  8. Boa tarde Amigo, Confira as configurações das fontes ODBC na máquina. Para que não está conseguindo fazer a conexão. Conheço esta sintaxe. Dá uma olhada. SELECT CODIGO, NOME, FUNCAO, MEMORANDO, BCADCOMPLETE FROM OPENDATASOURCE('MICROSOFT.ACE.OLEDB.12.0', 'EXCEL 12.0;Database=D:\Projetos\New_Xispas\NewPDV_Xispas.XLS',...[XISPAS$])
  9. Boa tarde Robson, A tabela que está deletando, possui uma coluna que faz referência à tabela 'Caderno_DiaSemana', coluna 'caderno'. Quer dizer que está querendo deletar registros na tabela mãe, que possui filhos vinculados. Terá que deletar os filhos, depois deletar os registros na mãe.
  10. Bom dia João, Faça o calculo com lapis e papel... fica mais facil de entender. A divisão de 712 por 11 não é exata. O resultado será 64 e terá o resto 8. O que interessa no calculo será este resto, e não o resultado da divisão. Faça a divisão na mão que entenderá. Um exemplo para sql: -- o resultado da divisão pega apenas numeros inteiros select 712/11 -- o resultado da divisão é o resto da operação select 712%11
  11. Bom dia João, Dê uma olhada no link: http://www.macoratti.net/boleto.htm
  12. Bom dia RqeCont, Seria isto? select (select max(Numero1) from tempNota1) as Numero1, (select max(Numero2) from tempNota2) as Numero2, (select max(Numero3) from tempNota3) as Numero3, (((select max(Numero1) from tempNota1) + (select max(Numero2) from tempNota2) + (select max(Numero3) from tempNota3))/3) as Media
  13. Bom dia S.ono, você pode utilizar, juntamente com a cláusula sum, as cláusulas distinct e group by também. No entanto, seria interessante saber o por que alguns produtos estão sendo duplicados. Pode ser da própria modelagem, ou erro na implementação nos relacionamentos. Uma coisa que percebi. Todos os valores estão contidos em uma mesma tabela. Por que não cria uma coluna para armazenar o valor da comissão? Muitas pessoas usam triggers para deixar os campos atualizados, mas há uma função no SQL q pouca gente conhece, mas muuuuito util. Segue um exemplo abaixo. Espero que ajude. create table dbo.TB_VENDA_ITENS ( Valor int, Quantidade int, Comissao int, Val_comissao as Valor*Quantidade*Comissao) insert into TB_VENDA_ITENS (Valor, Quantidade, Comissao) values (2, 3, 1) insert into TB_VENDA_ITENS (Valor, Quantidade, Comissao) values (2, 3, 3) select * from TB_VENDA_ITENS
  14. fulvio

    SQL Insert

    Bom dia Castelo, Alterei a procedure que te passei e a sua também. Em específico na sua procedure, na sintaxe "if not exists...", cláusula where: "...cod_requisicao = @codRequisicao and data <> @data". Não seria assim? "...cod_requisicao = @codRequisicao and data = @data". Coloquei logo abaixo a criação da tabela, a criação da procedure para simular um Identity e a sua procedure alterada. Vê se é isso que precisa. Qualquer dúvida, pode postar ai... :.) -- Criar tabela create table dbo.TabelaIdentity (Coluna int, Ano int) ------------------------------------------------------------------------------ -- Criar procedure CREATE Proc NomeProcedure @Retorno Integer OutPut As Declare @Identificador Integer Set NoCount On Begin Tran -- Testa se existe o ano já inserido na tabela de Identity if (select top 1 1 from TabelaIdentity where Ano=datepart(year, getdate())) is null insert into TabelaIdentity values (1, datepart(year, getdate())) -- Aqui você updata a coluna indetity, pegando pelo ano corrente. Update TabelaIdentity Set Coluna = (Select Coluna + 1 From TabelaIdentity where datepart(year, getdate())=Ano) where datepart(year, getdate())=Ano Select @Identificador = Coluna From TabelaIdentity where datepart(year, getdate())=Ano Commit Tran Set @Retorno = @Identificador ------------------------------------------------------------------------------ create procedure CriarRequisicao ( @codClasse int, @tipoRequisicao nvarchar(20), @codOficialRequisitante int, @codPreparadoPor int, @cod_estado int, @data date, @out int output ) as BEGIN TRANSACTION declare @codRequisicao int -- Aqui você recupera o valor Identity de acordo com o ano corrente. Fiz a verificação do Ano na Procedure. exec NomeProcedure @Retorno=@codRequisicao output --Verifica se no mesmo ano existe um cod_requisição igual. if not exists(select cod_requisicao from tb_requisicao where cod_requisicao = @codRequisicao and data = @data) begin -- Estado vai sempre a 1 - Pendente / 2 - Entregue insert into tb_requisicao(cod_requisicao,cod_classe,tipo,cod_preparadoPor, cod_ofical_requisitante,cod_estado,data) values(@codRequisicao,@codClasse,@tipoRequisicao,@codPreparadoPor, @codOficialRequisitante,1,@data); --Cria a Requisição set @out = 1 IF @@ERROR <> 0 ROLLBACK TRANSACTION ELSE COMMIT END ELSE BEGIN --Existe no mesmo ano o mesmo cod de requisição set @out = 2 ROLLBACK TRANSACTION END
  15. Boa tarde S.ono, você pode fazer o sum. Ficaria assim: sum(((TB_VENDA_ITENS.valor * TB_VENDA_ITENS.quantidade) * TB_VENDA_ITENS.comissao)) as val_comissao Mas você quer os valores, mais a soma deles? Se for isso, deixaria esta soma para o aplicativo...
  16. Se for na mesma Base, além de ter entednido errado, falei besteira... :.( Peço desculpas. O KUROI está com a razão!!
  17. Desta forma funciona, mas não seriam bancos distintos?
  18. Bom dia Rodrigo, Esta consulta é no Acess? Pelo mensagem de erro, parece que algum campo que está querendo agrupar possui valor null...
  19. Bom dia Rodrigo, Os processos mais simples e utilizados para fazer manipulções de dados em massa é o Wizard do SQL. Como você quer uma procedure, terá que fazer um loop para inserir os dados. Não tem como via script, você fazer uma inserção em massa utilizando apenas um comando insert (terá que ser em loop).
  20. Bom dia Sidnei, Como você atualizou a versão do SQL, verifique as configurações das conexões entre as bases.
  21. fulvio

    SQL Insert

    Bom dia Castelo, Ok, sem problemas.... rs. Segue o script abaixo com algumas explicações. Aí você adápta às suas necessidades. Se tiver alguma dúvida, pode postar. :.) -- Criar tabela create table dbo.TabelaIdentity (Coluna int, Ano int) -- Inserir dados insert into TabelaIdentity values (1, 2010) -- Criar procedure CREATE Proc NomeProcedure @Retorno Integer OutPut As Declare @Identificador Integer Set NoCount On Begin Tran -- Aqui você updata a coluna indetity, pegando pelo ano corrente. Update TabelaIdentity Set Coluna = (Select Coluna + 1 From TabelaIdentity where datepart(year, getdate())=Ano) Select @Identificador = Coluna From TabelaIdentity Commit Tran Set @Retorno = @Identificador
  22. Bom dia Vinicius, Pelo log você consegue monitorar estes processos. Mas terá que ver como está a configuração do seu Banco. Se o log estiver desativo, não conseguirá monitorar.
  23. Boa tarde Flávio, Tenta com o CASE. Fica mais fácil a implementação no select. Olha se roda ai: Case ((sum(IP.Qtde) / :Dias_Uteis3) * :Dias_Entrega1) > P.Estoque When P.Estoque Else ((sum(IP.Qtde) / :Dias_Uteis3) * :Dias_Entrega1) End as previsao_venda_entrega
  24. Boa tarde Rodrigo, Não tem como criar ALIAS (as) para consulta. O que pode-se criar são tabelas temporárias para serem utilizadas. Aí você poderá utilizar estas para fazer seus cálculos.
×
×
  • Criar Novo...