Usuário com melhor resposta
UPDATE se existir registro se não existir fazer INSERT

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)
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
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
-
-
-
-
-
-
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 ?