none
UPDATE se existir registro se não existir fazer INSERT RRS feed

  • Pergunta

  • Quero montar uma procedure onde recebo como parâmetro uma lista de códigos separados por vírgula.
    Estou usando uma função onde trato esse parâmetro e passo para ela a string com os valores e um outro parâmetro que é o delimitador. Isso eu já resolvi com uma função fSplit que achei na internet.

    Então, os valores são retirados uma a um pela função como se fosse uma linha de select.

    Tenho que verificar se esse código já existe na tabela A, caso tenha faço o UPDATE apenas. Se não tiver, faço INSERT.

    Como são vários registros quero saber se existe alguma forma de fazer um UPDATE ou INSERT para cada um deles como se fosse um Loop validando se estão ou não na tabela.


    • Movido Gustavo Maia Aguiar terça-feira, 25 de agosto de 2009 17:33 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 25 de agosto de 2009 17:23

Respostas

Todas as Respostas

  • Esse "split" que você faz, você coloca os valores em uma Table Variable ou uma tabela temporária?

    Porque dá p/ fazer um While p/ cada "registro" deste split.
    Em seguida um "If Exists()" você verifica se o registro existe, se sim, faz o Update, se não o Insert


    While:
    http://msdn.microsoft.com/pt-br/library/ms178642.aspx

    Exists:
    http://msdn.microsoft.com/pt-br/library/ms188336.aspx
    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/
    • Marcado como Resposta spitzmann quarta-feira, 26 de agosto de 2009 14:47
    terça-feira, 25 de agosto de 2009 17:40
  • spitzmann,

    Você já tentou utilizar i If Exists?

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 25 de agosto de 2009 18:49
  • Olá,

    Você pode utilizar o Merge.

    http://technet.microsoft.com/en-us/library/bb510625.aspx

    Abraços
    Demétrio Silva
    quarta-feira, 26 de agosto de 2009 12:20
  • Tambem o merge é bem bacana.... mas só no 2008 p/ cima..


    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/
    quarta-feira, 26 de agosto de 2009 13:16
  • Isso Fausto,

    Bem lembrado.

    Abraços

    Demétrio Silva
    quarta-feira, 26 de agosto de 2009 13:20
  • Olá,

    Você pode utilizar o Merge.

    http://technet.microsoft.com/en-us/library/bb510625.aspx

    Abraços
    Demétrio Silva

    Eu vi isso. Estou com o 2005 :-(


    quarta-feira, 26 de agosto de 2009 14:44
  • Estou colocando numa tabela temporária.

    Resolvi o problema usando um cursor. Nele verifico se o produto já existe usando um SELECT COUNT(*)
    Agora está OK. Por conta do tempo que tenho para entrregar não estou pensando em algo com tanta performance e também não é uma tabela que terá muitos registros.

    Será que eu poderia abrir uma transação antes de abrir o cursor e outra após eu fechá-lo ?


    quarta-feira, 26 de agosto de 2009 14:46