Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Modificar campo al insertar registro (https://www.clubdelphi.com/foros/showthread.php?t=91794)

LIGERO 28-04-2017 12:37:52

Modificar campo al insertar registro
 
Buenas:

Estoy haciendo un trigger para cuando se inserta un registro en una base de datos, modificar uno de los campos de dicho registro.


Primera opción que no funciona

Código SQL [-]

USE [G001]
GO
/****** Object:  Trigger [dbo].[mapeoweb]    Script Date: 04/28/2017 10:43:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[mapeoweb]
ON [dbo].[INCIDENCIASLIN]
FOR INSERT
AS


BEGIN

  SET NOCOUNT ON

  if (comentario like '%MRW%')
    totalcliente=totalcliente / 1.21
       
END



Esta opción funciona, pero realiza el cambio en todos los registros de la tabla implicados en la clausula where

Código SQL [-]

USE [G001]
GO
/****** Object:  Trigger [dbo].[mapeoweb]    Script Date: 04/28/2017 10:43:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[mapeoweb]
ON [dbo].[INCIDENCIASLIN]
FOR INSERT
AS


BEGIN

  SET NOCOUNT ON

update incidenciaslin
set totalcliente=totalcliente / 1.21    
WHERE comentario like '%MRW%' and codarticulo<=0

update incidenciaslin
set codarticulo=9586  
WHERE comentario like '%MRW%' 


update incidenciaslin
set codarticulo=22175,
  UDSCLI1=1,
  UDSCLI2=1,
  UDSCLI3=1,
  UDSCLI4=1, 
  totalcliente=2.5
WHERE comentario like '%MegaReembolso%' 

END



Muchas gracias y espero poder solucionar el problema con vuestra ayuda.

orodriguezca 28-04-2017 20:47:17

Hace algo de tiempo que no hago nada en SQL Server así que mi información pueda ser algo inexacta. Para poder modificar los campos insertados el trigger debe ser declarado como instead of insert:

Código SQL [-]
CREATE TRIGGER nombretrigger ON nombretabla
INSTEAD OF INSERT 
AS

Lo segundo es que para accesar los registros que se están insertando hay que hacer uso de la tabla especial inserted.

Con esta información puedes realizar busqueda en Google y seguramente encontraras muchos ejemplos funcionales.

LIGERO 02-05-2017 10:21:22

Después de algunos intentos, este código no me da error, pero tampoco inserta la líneas del pedido.

Código SQL [-]
USE [G001]
GO
/****** Object:  Trigger [dbo].[mapeoweb]    Script Date: 05/02/2017 10:16:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[mapeoweb]
ON [dbo].[INCIDENCIASLIN]
instead of INSERT
AS

declare @linea as int

BEGIN

  SET NOCOUNT ON

  set @linea = (SELECT idlinea FROM INSERTED)

  if EXISTS( SELECT comentario FROM INSERTED where comentario like '%MRW%')
  begin
    update incidenciaslin 
    set totalcliente = totalcliente / 1.21 
    where idlinea = @linea  
  end
    
END


La franja horaria es GMT +2. Ahora son las 01:36:21.

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