Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2022
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.496
Poder: 21
MAXIUM Va camino a la fama
Insert or Update

Hola,

La consulta es muy simple. ¿Como puedo hacer un Insert or Update en MSSQL usando Delphi?

Ideal poder usar parametros...

Muchas gracias como siempre.
Responder Con Cita
  #2  
Antiguo 07-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Algo así:
Código SQL [-]
begin tran    
  update table with (serializable) set ...    where key = @key     
  if @@rowcount = 0    
  begin      
    insert into table (key, ...) values (@key,..)    
  end 
commit tran

También puedes hacer un insert en un try except y si falla entonces hacer el update

Código Delphi [-]
try
  insert ...
except
  update ...
end
Responder Con Cita
  #3  
Antiguo 07-03-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.934
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La manera mas correcta usando SQL moderno es usando MERGE:

https://docs.microsoft.com/es-mx/sql...l-server-ver15
Código SQL [-]
ALTER PROCEDURE dbo.InsertUnitMeasure  
    @UnitMeasureCode nchar(3),  
    @Name nvarchar(25)  
AS
BEGIN  
    SET NOCOUNT ON;  
  
    MERGE Production.UnitMeasure AS tgt  
    USING (SELECT @UnitMeasureCode, @Name) as src (UnitMeasureCode, Name)  
    ON (tgt.UnitMeasureCode = src.UnitMeasureCode)  
    WHEN MATCHED THEN
        UPDATE SET Name = src.Name  
    WHEN NOT MATCHED THEN  
        INSERT (UnitMeasureCode, Name)  
        VALUES (src.UnitMeasureCode, src.Name)  
    OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;  
END;

Es muy importante entender que este método es mas confiable y veloz que la forma antigua, que solo se usa si la version del motor es VIEJA.

Este articulo explica bien los problemas de hacer un "upset/merge" ad-hoc:

https://michaeljswart.com/2017/07/sq...-antipatterns/
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 07-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No comentas qué componentes estás utilizando (ODO, FireDAC,...)
El MERGE es potente, pero la verdad es que no es fácil ni trivial utilizarlo.
Para consultas sencillas (con ADO) yo suelo utilizar el ROWCOUNT que ha comentado [Casimiro].

El algun caso el MERGE, pero hay que tenerlo muy claro...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 07-03-2022
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.496
Poder: 21
MAXIUM Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
No comentas qué componentes estás utilizando (ODO, FireDAC,...)
El MERGE es potente, pero la verdad es que no es fácil ni trivial utilizarlo.
Para consultas sencillas (con ADO) yo suelo utilizar el ROWCOUNT que ha comentado [Casimiro].

El algun caso el MERGE, pero hay que tenerlo muy claro...
Toda la razón. No consideré aquello. Uso los componentes de ADO
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Trigger Update or insert amerika111 MS SQL Server 0 03-08-2011 21:18:52
Ayuda con Update or Insert el-mono Firebird e Interbase 2 09-05-2011 20:46:06
Insert or update dependiendo de pk Joe_Balda Firebird e Interbase 4 13-08-2010 16:04:12
Problema con Insert y Update en ADOQuery Moises22 SQL 15 11-01-2006 07:57:13
problemas con el insert y el update tiagor64 SQL 5 16-02-2005 17:46:09


La franja horaria es GMT +2. Ahora son las 08:30:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi