Como leer datos desde un Trigger

24/03/2008 - 13:24 por Gustavo | Informe spam
Hola,
tengo que escribir un trigger en ms sql server 2005 que valide
Insert/Update/Delete de cada fila teniendo en cuenta si el comprobante en
cuestion ya fue incluido e un cierre diario de control.

El cierre es una tabla que tiene FechaInicioPeriodo y
FechaFinPeriodo.

Luego si FechaEmision del comprobante esta en el intervalo de
FechaInicioPeriodo y FechaFinPeriodo significa que no se puede modificar el
registro del comprobante.

Ahora nose como tomar FechaEmision del registro afectado para hacer
la comprobacion

IF EXIST(SELECT * FROM TablaCierre WHERE FechaEmision BETWEEN
FechaInicioPeriodo y FechaFinPeriodo)
ROLLBACK.

Saludos
Atte Gustavo
Rcia, Chaco - Argentina

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
24/03/2008 - 15:28 | Informe spam
Gustavo,

Crees que puedas postear la estructura de ambas tablas, incluyendo
restricciones?


AMB

"Gustavo" wrote:


Hola,
tengo que escribir un trigger en ms sql server 2005 que valide
Insert/Update/Delete de cada fila teniendo en cuenta si el comprobante en
cuestion ya fue incluido e un cierre diario de control.

El cierre es una tabla que tiene FechaInicioPeriodo y
FechaFinPeriodo.

Luego si FechaEmision del comprobante esta en el intervalo de
FechaInicioPeriodo y FechaFinPeriodo significa que no se puede modificar el
registro del comprobante.

Ahora nose como tomar FechaEmision del registro afectado para hacer
la comprobacion

IF EXIST(SELECT * FROM TablaCierre WHERE FechaEmision BETWEEN
FechaInicioPeriodo y FechaFinPeriodo)
ROLLBACK.

Saludos
Atte Gustavo
Rcia, Chaco - Argentina

Respuesta Responder a este mensaje
#2 Gustavo
25/03/2008 - 13:54 | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_008F_01C88E5E.495C12A0
boundary="-=_NextPart_001_0090_01C88E5E.495C12A0"


=_NextPart_001_0090_01C88E5E.495C12A0

Hola,
si el desencadenante esta mas abajo. Dentro del Trigger llama a una funcion DBO.[DimeEstadoDeCierre](FechaIniPeriodo, FechaFinPeriodo, EstadoCerrado) que retornara la fecha del cierre o NULL si aun no lo esta. EstadoCerrado siempre es 2 que significa cerrado.



USE [sigece]
GO
/****** Objeto: Trigger [dbo].[VerificaCierre] Fecha de la secuencia de comandos: 03/25/2008 09:47:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[VerificaCierre] ON [dbo].[CARTASPORTEEMITIDAS]
AFTER INSERT
AS
DECLARE @TipoOperacion CHAR(3), @FechaEmision DATETIME;
SELECT @TipoOperacion = [dbo].[DimeTipoDeOperacion]();
IF RTRIM(@TipoOperacion) = '' RETURN;
SELECT @FechaEmision = DBO.[DimeEstadoDeCierre](DBO.CARTASPORTEEMITIDAS.FechaEmision,DBO.CARTASPORTEEMITIDAS.FechaEmision,2)
IF @FechaEmision IS NOT NULL
ROLLBACK;

Saludos
Atte Gustavo
Rcia, Chaco - Argentina

"Alejandro Mesa" escribió en el mensaje de noticias:
Gustavo,

Crees que puedas postear la estructura de ambas tablas, incluyendo
restricciones?


AMB

"Gustavo" wrote:


Hola,
tengo que escribir un trigger en ms sql server 2005 que valide
Insert/Update/Delete de cada fila teniendo en cuenta si el comprobante en
cuestion ya fue incluido e un cierre diario de control.

El cierre es una tabla que tiene FechaInicioPeriodo y
FechaFinPeriodo.

Luego si FechaEmision del comprobante esta en el intervalo de
FechaInicioPeriodo y FechaFinPeriodo significa que no se puede modificar el
registro del comprobante.

Ahora nose como tomar FechaEmision del registro afectado para hacer
la comprobacion

IF EXIST(SELECT * FROM TablaCierre WHERE FechaEmision BETWEEN
FechaInicioPeriodo y FechaFinPeriodo)
ROLLBACK.

Saludos
Atte Gustavo
Rcia, Chaco - Argentina





=_NextPart_001_0090_01C88E5E.495C12A0

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.6000.16608" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px"
bgColor=#d6d6d6 leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">Hola,
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; si el desencadenante
esta mas abajo. Dentro del Trigger llama a una funcion
DBO.[DimeEstadoDeCierre](FechaIniPeriodo, FechaFinPeriodo, EstadoCerrado) que
retornara la fecha del cierre o NULL si aun no lo esta.&nbsp; EstadoCerrado
siempre es 2 que significa cerrado.<BR><BR><BR><BR>USE [sigece]<BR>GO<BR>/******
Objeto:&nbsp; Trigger [dbo].[VerificaCierre]&nbsp;&nbsp;&nbsp; Fecha de la
secuencia de comandos: 03/25/2008 09:47:20 ******/<BR>SET ANSI_NULLS
ON<BR>GO<BR>SET QUOTED_IDENTIFIER ON<BR>GO<BR>--IF OBJECT_ID
('dbo.VerificaCierre','TR') IS NOT NULL<BR>--&nbsp;&nbsp; DROP TRIGGER
dbo.VerificaCierre;<BR>--GO<BR><BR>ALTER TRIGGER [dbo].[VerificaCierre] ON
[dbo].[CARTASPORTEEMITIDAS]<BR>AFTER INSERT<BR>AS<BR>DECLARE @TipoOperacion
CHAR(3), @FechaEmision DATETIME;<BR>SELECT @TipoOperacion =
[dbo].[DimeTipoDeOperacion]();<BR>IF RTRIM(@TipoOperacion) = ''
RETURN;<BR>SELECT @FechaEmision =
DBO.[DimeEstadoDeCierre](DBO.CARTASPORTEEMITIDAS.FechaEmision,DBO.CARTASPORTEEMITIDAS.FechaEmision,2)<BR>IF&nbsp;
@FechaEmision IS NOT NULL<BR>ROLLBACK;<BR><BR><STRONG>Saludos<BR>Atte
Gustavo<BR>Rcia, Chaco - Argentina <BR></STRONG><BR>"Alejandro Mesa"
&lt;&gt; escribió en el mensaje de
noticias:<BR>&gt;
Gustavo,<BR>&gt; <BR>&gt; Crees que puedas postear la estructura de ambas
tablas, incluyendo <BR>&gt; restricciones?<BR>&gt; <BR>&gt; <BR>&gt; AMB<BR>&gt;
<BR>&gt; "Gustavo" wrote:<BR>&gt; <BR>&gt;&gt; <BR>&gt;&gt;
Hola,<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tengo que
escribir un trigger en ms sql server 2005 que valide <BR>&gt;&gt;
Insert/Update/Delete de cada fila teniendo en cuenta si el comprobante en
<BR>&gt;&gt; cuestion ya fue incluido e un cierre diario de control.<BR>&gt;&gt;
<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; El cierre es una
tabla que tiene FechaInicioPeriodo y <BR>&gt;&gt; FechaFinPeriodo.<BR>&gt;&gt;
<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luego si
FechaEmision del comprobante esta en el intervalo de <BR>&gt;&gt;
FechaInicioPeriodo y FechaFinPeriodo significa que no se puede modificar el
<BR>&gt;&gt; registro del comprobante.<BR>&gt;&gt;
<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ahora nose como
tomar FechaEmision del registro afectado para hacer <BR>&gt;&gt; la
comprobacion<BR>&gt;&gt; <BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; IF EXIST(SELECT *
FROM TablaCierre WHERE FechaEmision BETWEEN <BR>&gt;&gt; FechaInicioPeriodo y
FechaFinPeriodo)<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ROLLBACK.<BR>&gt;&gt; <BR>&gt;&gt; Saludos<BR>&gt;&gt; Atte Gustavo<BR>&gt;&gt;
Rcia, Chaco - Argentina <BR>&gt;&gt;</BODY></HTML>

=_NextPart_001_0090_01C88E5E.495C12A0--

=_NextPart_000_008F_01C88E5E.495C12A0
name="DimeEstadoDeCierre.txt"
filename="DimeEstadoDeCierre.txt"

USE [sigece]
GO
/****** Objeto: UserDefinedFunction [dbo].[DimeEstadoDeCierre] Fecha de la secuencia de comandos: 03/25/2008 09:49:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[DimeEstadoDeCierre] (@FechaPeriodo1 DATETIME, @FechaPeriodo2 DATETIME, @EstadoCierre TINYINT)
RETURNS DATETIME -- Devuelve Fecha
AS
BEGIN
DECLARE @FechaCierre DATETIME;
IF @EstadoCierre IS NULL SET @EstadoCierre = 2;
IF @FechaPeriodo1 IS NULL SET @FechaPeriodo1 = GETDATE();
IF @FechaPeriodo2 IS NULL SET @FechaPeriodo2 = GETDATE();


SELECT TOP 1 @FechaCierre = FechaCierre FROM CIERREDIARIOCTRL
WHERE FechaPeriodo1 >= CONVERT(CHAR(8),@FechaPeriodo1,112) AND FechaPeriodo1 < CONVERT(CHAR(8),@FechaPeriodo1+1,112)
AND FechaPeriodo2 >= CONVERT(CHAR(8),@FechaPeriodo2,112) AND FechaPeriodo2 < CONVERT(CHAR(8),@FechaPeriodo2+1,112)
AND EstadoCierre = @EstadoCierre
ORDER BY FechaPeriodo1 DESC

RETURN @FechaCierre;
END


=_NextPart_000_008F_01C88E5E.495C12A0
name="CARTASPORTEEMITITDAS.TXT"
filename="CARTASPORTEEMITITDAS.TXT"


=_NextPart_000_008F_01C88E5E.495C12A0
name="CIERREDIARIOCTRL.TXT"
filename="CIERREDIARIOCTRL.TXT"

USE [sigece]
GO
/****** Objeto: Table [dbo].[CIERREDIARIOCTRL] Fecha de la secuencia de comandos: 03/25/2008 09:43:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[CIERREDIARIOCTRL](
[IDCierreDiario] [int] IDENTITY(1,1) NOT NULL,
[FechaPeriodo1] [datetime] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_FechaCierreDiario] DEFAULT (getdate()),
[FechaPeriodo2] [datetime] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_FechaPeriodo2] DEFAULT (getdate()),
[FechaCierre] [datetime] NULL CONSTRAINT [DF_CIERREDIARIOCTRL_FechaCierreEfectivo] DEFAULT (getdate()),
[IDUsuario] [int] NOT NULL,
[CanCPEM] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanCPEM] DEFAULT ((0)),
[CanCPRE] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanCPRE] DEFAULT ((0)),
[CanCPDe] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanCPDe] DEFAULT ((0)),
[CanC1116A] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanCertificados] DEFAULT ((0)),
[CanC1116B] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanLiquidacions] DEFAULT ((0)),
[CanR1116A] [smallint] NOT NULL,
[CanR1116B] [smallint] NOT NULL,
[CanFORMC14] [smallint] NOT NULL,
[CanAnulados] [smallint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CanAnulados] DEFAULT ((0)),
[ObservCierre] [varchar](256) NULL,
[CierraExisten] [tinyint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_CierraExisten] DEFAULT ((0)),
[EstadoCierre] [tinyint] NOT NULL CONSTRAINT [DF_CIERREDIARIOCTRL_EstadoCierre] DEFAULT ((1)),
CONSTRAINT [PK_CIERREDIARIOCTRL] PRIMARY KEY CLUSTERED
(
[IDCierreDiario] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
=_NextPart_000_008F_01C88E5E.495C12A0--
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida