none
Insert Avançada em SQL RRS feed

  • Pergunta

  • Ola amigos, primeiramente gostaria de me apresentar, sou novo da comunidade e gostaria muito de contribuir com todos, mais primeiro preciso de uma grande ajuda. Estou desenvolvendo um novo sistema de monitoramento a distancia, e eles de tempos em tempos envia uma SMS com os dados coletados. A SMS vem do seguinte modo:

    - A temperatura é: XX e a umidade atualmente é: XX.

    Eu tenho que criar um comando SQL que pegue apenas o valor da temperatura e da umidade dessa string para que possa salvar isso numa base de dados. mais em colunas distintas da tabela. A tabela ja esta criada e chama-se clima, os campos que ela possui são id( auto increment (PK)), temperatura e clima. Gostaria apenas de pegar esses dois dados e salvar cada 1 em sua coluna certa. Alguma luz? Realmente nao consigo fazer isso.. Obrigado

    sexta-feira, 17 de agosto de 2012 12:06

Respostas

  • Bom dia

    Pedro é aconselhável q a msg seja tratada na aplicação.

    porém segue exemplo:

    --MSG SMS
    DECLARE @SMS VARCHAR(100) 
    SET @SMS = 'A temperatura é: 20 e a umidade atualmente é: 33.'
    
    -- Criando Tabela Clima
    DECLARE @Clima AS TABLE(Id int identity(1,1), Temperatura Char(2), clima Char(2))
    
    -- Populando a tabela
    INSERT INTO @Clima (Temperatura, clima)
    SELECT SUBSTRING(@SMS,CHARINDEX(':',@SMS)+2,2),
           SUBSTRING(@SMS,CHARINDEX(':',@SMS,CHARINDEX(':',@SMS)+1)+2,2)
           
    --select na tabela
    SELECT * FROM @Clima     


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta PedroNeto sexta-feira, 17 de agosto de 2012 14:31
    sexta-feira, 17 de agosto de 2012 13:27

Todas as Respostas

  • Olá Pedro, seja bem vindo.

    Utilizando uma combinação de CHARINDEX e SUBSTRING para pegar esses 2 valores, atribuindo a uma variável e fazendo o insert, é possível.

    Mas a pergunta principal aqui é se esse tratamento tem que ser feito realmente pelo SQL Server. Não sei como está montada a sua estrutura, mas, IMHO, o ideal seria que a sua aplicação fizesse a separação e você realizasse somente o insert no banco.

    Espero ter ajudado.

    []'s!


    sexta-feira, 17 de agosto de 2012 12:39
  • Bom dia

    Pedro é aconselhável q a msg seja tratada na aplicação.

    porém segue exemplo:

    --MSG SMS
    DECLARE @SMS VARCHAR(100) 
    SET @SMS = 'A temperatura é: 20 e a umidade atualmente é: 33.'
    
    -- Criando Tabela Clima
    DECLARE @Clima AS TABLE(Id int identity(1,1), Temperatura Char(2), clima Char(2))
    
    -- Populando a tabela
    INSERT INTO @Clima (Temperatura, clima)
    SELECT SUBSTRING(@SMS,CHARINDEX(':',@SMS)+2,2),
           SUBSTRING(@SMS,CHARINDEX(':',@SMS,CHARINDEX(':',@SMS)+1)+2,2)
           
    --select na tabela
    SELECT * FROM @Clima     


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta PedroNeto sexta-feira, 17 de agosto de 2012 14:31
    sexta-feira, 17 de agosto de 2012 13:27
  • Obrigado por todos pela grande ajuda, não é possivel que essa msg seja tratada no software, posso inserir a string toda em uma tabela e depois selecionar apenas a parte que me interessa ou simplesmente selecionar apenas o que me interessa e ja inserir nos campos  corretos. Qual seria a melhor forma?Alguem poderia me sugerir? Agradeço muito pela ajuda. Obrigado
    sexta-feira, 17 de agosto de 2012 13:51
  • Se você já tiver as várias strings em uma tabela, o ideal é fazer o insert direto por ela, senão você invariavelmente vai ter que usar cursor pra varrer registro a registro e inserir o dado desejado, o que não é nada recomendado.

    Espero ter ajudado.

    sexta-feira, 17 de agosto de 2012 14:03
  • Certo, então você recomendaria eu inserir apenas os dados que realmente me interessam? Na verdade haverá apenas uma inserção no banco a cada 15 minutos, não é uma carga tão grande assim e as strings não passarão de 50 caracteres.
    sexta-feira, 17 de agosto de 2012 14:07
  • Dessa forma então não há problemas em criar uma procedure para fazer como o Leonardo falou.
    O meu medo era, como você falou que eles enviavam as informações de tempos em tempos, que houvesse uma carga maior de informações a serem inseridas.
    sexta-feira, 17 de agosto de 2012 14:21
  • Obrigado a todos, vou dar uma estudada sobre as procedure então e depois posto o feedback. Obrigado a todos 
    sexta-feira, 17 de agosto de 2012 14:31