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 Fernando, Altera o tipo de int (4) para bigint (8). Vá na "Propriedades" da tabela e mude por lá. Caso não consiga, pode postar.
  2. Boa tarde Alberto, Os dv´s serão iguais a 1 mesmo, pois está "sentando" o @RESTO = 0, e não há nenhuma manipulação deste dado até a cláusula IF (por isso que perguntei se os valores atribuidos às variáveis no começo do script eram exemplo). Perceba que o script possui "IF (@RESTO = 1)". Sendo assim, o script somente executa a parte do ELSE, onde tinha colocado o teste na variável "@Retorno" (post anterior). Caso tenha alguma dúvida, sempre estou on line no MSN (olhe no meu perfil). Podemos trocar algumas idéias a respeito. Qualquer dúvida, pode postar!!
  3. Bom dia André, A função LIMIT é utilizada pelo MySQL, para paginação web. Por exemplo: você tem um recordset que retorna 1000 linhas, mas quer dividi-las de 200 em 200, para visualização em sua página. Aí você pode utilizar a função LIMIT. Problema: esta função existe apenas em MySQL. No SQL SERVER 2000 não há. No 2005, há funções de Ranking: Row_Number(), Rank, mas só são utilizadas em 2005. Bancos migrados de 2000 para 2005 você terá que alterar o nível de compatibilidade para 90. Qualquer dúvida, pode postar.
  4. Bom dia Alberto, A alteração que realizei foi realmente no @retorno, e não no @resto. Mas de acordo com o script que passou, vc "seta" a variável @RESTO = 0 no principio do script, não realiza nenhuma atribuição de valor a variável, e testa se @RESTO = 1. Pergunta: estes valores "setando" as variáveis é apenas um exemplo? Achei a explicação do manual da caixa que passou, um pouco ambiguo: - você altera o resto para 1 quando o mesmo for 0, 10 ou 1? - ou você retorna o digito 1 quando o resto for 0, 10 ou 1? Pesquisei na net e identifiquei que o digito é 1 quando o resto for 0, 10 ou 1. http://pt.wikipedia.org/wiki/D%C3%ADgito_v...#M.C3.B3dulo_11 Realizei a implementação novamente. Dê uma olhada se é isto mesmo. Testei também o peso, pois de acordo com a regra que passou, o peso deverá ser de 2 a 9. Comentei no código a alteração acrescentada. Qualquer dúvida, posta ai. USE [secraso] GO /****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/23/2010 11:22:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP -- codigo acrescentado IF (@PESO BETWEEN '2' AND '9') and (@RESTO in (0, 1, 10)) Begin Set @RETORNO = 1 RETURN @RETORNO End ------ IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END RETURN @RETORNO END
  5. fulvio

    SQL x Oracle

    Boa tarde Raposo, Segue link. Espero que ajude. http://msdn.microsoft.com/pt-br/library/ms190479.aspx
  6. Boa tarde Alberto, Obrigado, pra você também. Precisando nós estamos aí!!
  7. fulvio

    SQL x Oracle

    Boa tarde Raposo. Há duas possibilidades. Você realizar um espelhamento dos dados que pretende consultar, ou fazer um "Linked Server" para acessar os dados diretamente. Sintaxe SQL para acesso via Linked Server (prefiro a 2ª para manutenção): select * from NOME LINKED SERVER..NOME BANCO.TABELA ou select * from openquery (NOME LINKED SERVER, 'select * from TABELA')
  8. Boa tade Alberto, Alterei a função. Dá uma olhada se está ok. Caso não seja isso que deseja, pode postar!! USE [secraso] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END IF @RETORNO=0 or @RETORNO=10 SET @RETORNO = 1 RETURN @RETORNO END
  9. fulvio

    Binary para Varchar

    Boa tarde Amigo, Estes dados já estão gravados na sua base desta forma (0x9400000A0.....)? Os dados estão em Hexa. Não conheço nenhuma função do SQL que faça a conversão, a não ser que você faça a sua. Tem um site na net que faz a conversão pra você, mas teria que copiar a linha e colar no campo texto do site. Não sei se resolveria, mas dá para se ter uma idéia. http://www.calculadoraonline.com.br/view/c...hexadecimal.php Caso não seja isso que procura, pode postar aí. Espero que ajude!!!
  10. fulvio

    Update com From

    Bom dia Kurarj, No caso do 1º update, a tabela está sendo relacionada com ela mesma. Pelo que vi, não há lógica você fazer isto, a menos que a tabela seja recursiva. Pelas cláusulas utilizadas no subselect, não vejo recursividade. Sendo assim, o 2º select fará a mesma coisa. Outra coisa. Pode-se alterar a sintaxe de: AND SITUACAO_VOLUME NOT IN (4) Por: AND SITUACAO_VOLUME <> 4 Utilize o "NOT IN" quando for referenciar mais de um valor. Qualquer dúvida, pode postar.
  11. Boa tarde Arldin, - Iniciar / Microsoft SQL Server 2005 / SQL Server Management Studio - "Logar" no Servidor. - Abrir a aba "Object Explorer". - Clique duplo (ou +) no nome do Servidor, para abrir a árvore. - Clique em "Databases". - Encontre e clique no nome do Banco. - Clique com o botão direito do mouse em "Tables". - Clique em "New Table...". - Caso já tenha o script, clique em "New Query" (próximo da opção "File") e execute. Qualquer dúvida, pode postar.
  12. Boa tarde Tureto, Ok, entendido. Vou dar uma idéia de como fazer o script. Caso tenha algum dúvida ou problema, pode falar que farei o script para você. Pode-se fazer da seguinte forma: - Migrar os dados para uma tabela de transporte (Caso queira fazer na hora da migração, pode-se acrescentar o script em DTS - SQL2000 ou SSIS - SQL2005). - Criar uma nova coluna "numero duplicata" (Num_dup_Nova) para regeração dos números. - Fazer um loop regerando os números um a um, pois você terá que verificar todos os já gerados. - Caso encontre um número igual, pegar o max da parcela da NF e incrementá-lo. - A saida o loop é quando todos os numeros da duplicata estiverem preenchidos. - Pegar a tabela de transporte e dar carga na principal. Caso tenha alguma duvida, posso fazer o script para você, levando em consideração os dados que postou acima.
  13. Boa tarde Tureto, Vamos ver se entendi: você quer um script que altere a numeração de parcelas (caso as NF´s sejam iguais - igual ao caso acima) para correção das duplicidades da duplicata? Os dados que pretende migrar já estão na Base, ou serão alterados e gravados na hora da migração?
  14. Putz... rs... Tenta desta forma então: create table #tmp (cliente_aniversario smalldatetime, cliente_id int) insert into #tmp values ('2009-12-25', 91) select * from #tmp -- criei uma veriável para setar o valor do dia. declare @DiaAniversario varchar (2) Set @DiaAniversario = '10' -- seria interessante também passar o código do cliente via parametro UPDATE #tmp SET cliente_aniversario =(convert(varchar, (select year(cliente_aniversario) from #tmp where cliente_id=91)) + '-' + convert(varchar,(select month(cliente_aniversario) from #tmp where cliente_id=91)) + '-' + @DiaAniversario) where cliente_id=91 select * from #tmp
  15. Bom dia Silvio, Ok, entendido. Ao invés de alterar o dia, mês ou ano, altera a data por completo. Caso o cliente erre (na digitação) a data de seu aniversário, o mesmo a digitará novamente. Aí você "updata" o banco com a data certa. Fica bem mais complexo você controlar se o cliente errou o dia, o mês ou o ano. Independente do que tenha errado, se a informação está errada, faça a correção no campo por completo. :.) Sintaxe: UPDATE CLIENTES SET cliente_aniversario = (aqui você coloca a data) where cliente_id= 91
  16. Bom dia Silvio, A sintaxe do update está incorreta. Na verdade, não consegui entender ao certo o que está querendo fazer. Se você quer "updatar" a data, você terá que passar a data. A sintaxe (day(cliente_aniversario)) = 20 deve estar na cláusula WHERE. Fiz um exemplo logo abaixo pra você entender o q estou querendo falar. Espero q ajude. Qualquer dúvida, posta aí. create table #tmp (cliente_aniversario smalldatetime, cliente_id int, CampoAlterado int) insert into #tmp values ('2009-12-30 11:50:00', 91, 55555) select * from #tmp UPDATE #tmp SET CampoAlterado= 333333 where cliente_id= 91 and day(cliente_aniversario) = 30 select * from #tmp
  17. Boa tarde Marvi. você está querendo paginação utilizando alguma função do SQL Server? Se for isso, estava procurando alguma coisa a respeito... pelo q li, o SQL Server não possui esta função. você terá q fazer via fonte mesmo... Neste link, possui uma simulação da função LIMIT do MySql para SQL Server... espero q ajude!! :.) http://www.devparadise.com/technoweb/code/sql/a453.php
  18. Bom dia Fernando, Então vamos lá... você terá q criar uma trigger na tabela onde será realizada a manipulação. PROBLEMA: em qual das tabelas será inserida a trigger? SOF_NOTA_FISCAL_DE_ENTRADA ou SOF_ITENS_DA_NOTA_FISCAL? A NF provavelmente será a 1ª inserção dos dados, pois não há como existir itens de NF sem a NF já criada. Coloquei a trigger então na SOF_ITENS_DA_NOTA_FISCAL. PROBLEMA: a trigger só será ativada quando houver inserção na SOF_ITENS_DA_NOTA_FISCAL. você terá q criar um campo de controle na tabela SOF_ITENS_DA_NOTA_FISCAL. Criei a coluna BAIXA para identificar se o produto já teve baixa ou não. PROBLEMA: se não criar este controle, terá que passar este controle para dentro da trigger, utilizando temporárias para saber quais os itens foram baixados e quais ainda estão pendentes. você terá q criar os relacionamentos entre as tabelas. No exemplo que postou acima, não possui nenhuma. PROBLEMA: se não criar, 99% de chance de perder as integridades dos dados. Qualquer erro na trigger, poderá "travar" a tabela SOF_ITENS_DA_NOTA_FISCAL (caso tenha um loop infinito por exemplo). Em resumo, particularmente, preferiria criar uma Procedure para controlar o estoque e baixa de nota. Mas como pediu trigger, segue um exemplo simples abaixo. O script está comentado. Vai rodando passo a passo. Sempre dê o "select" pra ver os resultados. OBS.: o exemplo é simples. você terá q implementar suas regras. É apenas uma idéia de como funciona. Entendendo este exemplo, aí é só fazer do seu jeito. Espero q ajude. Qualquer dúvida, posta aí!!! :.) -- Criação das tabelas create table dbo.SOF_CADASTRO_DE_PRODUTOS (CAD_CODIGO int IDENTITY (1, 1) NOT NULL, Nome varchar(80), ESTOQUE_ATUAL int) create table dbo.SOF_NOTA_FISCAL_DE_ENTRADA (SOF_NOT_CODIGO int IDENTITY (1, 1) NOT NULL, NOT_ITENS varchar(80)) create table dbo.SOF_ITENS_DA_NOTA_FISCAL (SOF_ITE_ID int IDENTITY (1, 1) NOT NULL, SOF_NOT_CODIGO int, SOF_ITE_QUANTIDADE int, Baixa varchar(3)) ----------------------------------------------------------------------------------------------- -- Criação da Trigger CREATE TRIGGER [TRG_Insere_Nota]ON dbo.SOF_ITENS_DA_NOTA_FISCAL FOR Insert AS -- Declaração de variáveis Declare @Item int Declare @NomeItem varchar(80) Declare @ItemQuantidade int -- Recupera o item a ser inserido Set @Item = (select top 1 SOF_ITE_ID from SOF_ITENS_DA_NOTA_FISCAL where baixa='não') -- loop até acabar os itens a serem baixados While (@Item is not null) Begin -- Produto não existe na tabela de cadastro de produto. Inserir. if (select top 1 1 from SOF_CADASTRO_DE_PRODUTOS where nome in (select NOT_ITENS from SOF_NOTA_FISCAL_DE_ENTRADA E, SOF_ITENS_DA_NOTA_FISCAL I where E.SOF_NOT_CODIGO=I.SOF_NOT_CODIGO and I.SOF_ITE_ID=@Item)) is null Begin Set @NomeItem = (select E.NOT_ITENS from SOF_NOTA_FISCAL_DE_ENTRADA E, SOF_ITENS_DA_NOTA_FISCAL I where E.SOF_NOT_CODIGO=I.SOF_NOT_CODIGO and I.SOF_ITE_ID=@Item) Set @ItemQuantidade = (select SOF_ITE_QUANTIDADE from SOF_ITENS_DA_NOTA_FISCAL where SOF_ITE_ID=@Item) insert into SOF_CADASTRO_DE_PRODUTOS values (@NomeItem, @ItemQuantidade) update SOF_ITENS_DA_NOTA_FISCAL set baixa = 'SIM' where SOF_ITE_ID=@Item End Else Begin -- Produto existe na tabela de cadastro de produto. Atualizar estoque. update SOF_CADASTRO_DE_PRODUTOS set ESTOQUE_ATUAL = (ESTOQUE_ATUAL + (select SOF_ITE_QUANTIDADE from SOF_ITENS_DA_NOTA_FISCAL where SOF_ITE_ID=@Item)) update SOF_ITENS_DA_NOTA_FISCAL set baixa = 'SIM' where SOF_ITE_ID=@Item End Set @Item = (select top 1 SOF_ITE_ID from SOF_ITENS_DA_NOTA_FISCAL where baixa='não') End ----------------------------------------------------------------------------------------------- -- inserindo uma nota insert into SOF_NOTA_FISCAL_DE_ENTRADA values ('Produto XXXX') -- verifica os dados select * from SOF_CADASTRO_DE_PRODUTOS select * from SOF_NOTA_FISCAL_DE_ENTRADA select * from SOF_ITENS_DA_NOTA_FISCAL -- inserindo um item para a nota insert into SOF_ITENS_DA_NOTA_FISCAL values (1, 32, 'não') -- verifica os dados -- o produto foi inserido no estoque. select * from SOF_CADASTRO_DE_PRODUTOS select * from SOF_NOTA_FISCAL_DE_ENTRADA select * from SOF_ITENS_DA_NOTA_FISCAL -- inserindo o mesmo item insert into SOF_ITENS_DA_NOTA_FISCAL values (1, 32, 'não') -- verifica os dados -- o estoque foi atualizado, pois o item já existia. select * from SOF_CADASTRO_DE_PRODUTOS select * from SOF_NOTA_FISCAL_DE_ENTRADA select * from SOF_ITENS_DA_NOTA_FISCAL -- inserindo outra nota insert into SOF_NOTA_FISCAL_DE_ENTRADA values ('Produto YYYY') -- verifica os dados -- Outro produto. select * from SOF_CADASTRO_DE_PRODUTOS select * from SOF_NOTA_FISCAL_DE_ENTRADA select * from SOF_ITENS_DA_NOTA_FISCAL -- inserindo um item para a nota insert into SOF_ITENS_DA_NOTA_FISCAL values (2, 10,'não') -- verifica os dados -- Produto inserido... select * from SOF_CADASTRO_DE_PRODUTOS select * from SOF_NOTA_FISCAL_DE_ENTRADA select * from SOF_ITENS_DA_NOTA_FISCAL
  19. Bom dia Fernando, Dá uma lida nos conceitos de trigger, ok? Tenta fazer você mesmo. Após leitura, se não entender o funcionamento ou não conseguir fazer, posta aí q ajudaremos. A trigger possui algumas particularidades q é importante saber. você pode desenvolver também uma procedure para controle de estoque (vai depender de como será a implementação), por isso a leitura dos conceitos.... :.) http://www.macoratti.net/sql_trig.htm
  20. Como o resultado são as pessoas q possuem dados diferentes, o distinct retornará o mesma quantidade de linhas.... Qual a versão do SQL q tá utilizando? Rodei no 2000 e 2005 sem mensagem de erro.
  21. Bom dia Amigo. você pode fazer a junção do CASE. Neste caso será possível pois nos dois scripts você possui uma cláusula em comum, onde se coloca o valor ' ' . Coloquei esta cláusula em comum no ELSE, e realizei a junção dos campos. Dá uma olhada no exemplo logo abaixo. Caso não seja isto, posta aí.... :.) Seu código: case databaixa when null then ' ' else 'PG' end as situacao, CASE STATUS WHEN 'C' THEN 'CA' ELSE ' ' END AS SITUACAO, Código alterado: create table #Teste (Chave int, databaixa datetime, status varchar(2)) insert into #Teste (Chave, databaixa) values (1, getdate()) insert into #Teste (Chave, databaixa) values (2, getdate()) insert into #Teste (Chave, status) values (3, 'C') select * from #Teste select case when databaixa is not null then 'PG' when STATUS='C' then 'CA' else ' ' end as situacao from #Teste
  22. Ok. Tinha entendido outra coisa quando li seu 1º post.... :.( Com o UNION você não conseguirá realizar a pesquisa. Fiz um exemplo logo abaixo utilizando uma tabela temporária. Copia e cola no SQL. Olha se é isso q está querendo. Neste exemplo, listo apenas as pessoas q possuem duplicidade com dados diferentes, ok? A pesquisa é excludente. Eu retiro da listagem as pessoas q estão com o cadastro ok.... Se não for isso, posta aí!!! :.) create table #BD8Vinc (CoMatricula int, NoEmpregado varchar(80), DaNascimentoEmpregado datetime, CoCpfEmpregado int) insert into #BD8Vinc (CoMatricula, NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado) values (1, 'Antonio', '1950-01-01', 22) insert into #BD8Vinc (CoMatricula, NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado) values (1, 'Antonio', '1950-01-01', 22) insert into #BD8Vinc (CoMatricula, NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado) values (2, 'Joana ', '1977-12-03', 33) insert into #BD8Vinc (CoMatricula, NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado) values (2, 'Joana', '1977-06-23', 33) select * from #BD8Vinc Select NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado from #BD8Vinc where CoMatricula not in (Select CoMatricula from #BD8Vinc group by NoEmpregado, DaNascimentoEmpregado, CoCpfEmpregado, CoMatricula HAVING ( COUNT(CoMatricula) > 1 ))
  23. Bom dia Marcelo, Dei uma pesquisada neste problema e vi que o comando possui algumas limitações de tamanho e arquivos de 65536 bytes ou múltiplos de 65536. http://support.microsoft.com/default.aspx?...kb;en-us;324122 você pode utilizar outras formar de exportação - Import Export, DTS (SQL2000), SSIS (SQL2005)...
  24. Bom dia Amigo. Se você quer fazer via VB, fica mais fácil do q no SQL. Via VB, identifique o caminho do arquivo e deixe o VB fazer o trabalho: trate os dados via aplicativo e apenas abra a conexão com o Banco de Dados para gravar as informações. Se seu arquivo TXT não possui nenhum delimitador, você pode utilizar as linhas como delimitadores, ok? Se tiver alguma dúvida, posta aí... :.)
  25. Bom dia Fernando, A DDL (Data Definition Language), ou linguagem de definição de dados, é a parte do SQL usada para definir dados e objetos de um banco de dados. Quando esses comandos são usados, são feitas entradas no dicionário de dados do SQL. Provavelmente o q o seu colega pediu foi para passar o script da criação das estruturas da Base (tabela, indice, privilégios de acesso). Outra coisa.... se você quiser colocar zeros a esquerda, certifique-se q o campo seja caracter, pois se for numérico os zeros serão suprimidos pelo SQL.
×
×
  • Criar Novo...