triggers ayuda ayuda
Publicado por MENDOZA (1 intervención) el 11/06/2019 22:47:04
Buenas Tardes
Presento la siguiente situación. El Triggers en la actualidad funciona pero deseo agregarle la funcionalidad de que me me refleja el mensaje '@?@1#USR_DISOPD# ya que la cantidad de items no puede ser mayor a 3#' pero que solo lo refleja si están llenos los 3 renglones de lo contrario no dejar de cargar algún dato. Es decir si deseo caragar 1 o 2 renglones no me debería permitir. Anexo Query
Presento la siguiente situación. El Triggers en la actualidad funciona pero deseo agregarle la funcionalidad de que me me refleja el mensaje '@?@1#USR_DISOPD# ya que la cantidad de items no puede ser mayor a 3#' pero que solo lo refleja si están llenos los 3 renglones de lo contrario no dejar de cargar algún dato. Es decir si deseo caragar 1 o 2 renglones no me debería permitir. Anexo Query
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
USE [GEORGE]
GO
/****** Object: Trigger [dbo].[InsUSR_DISOPD] Script Date: 06/11/2019 17:36:24 ******/SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** CWA Object: Insert trigger for table USR_DISOPD - Script Date: 12/12/17 11:24:19 ******/ALTER TRIGGER [dbo].[InsUSR_DISOPD] ON [dbo].[USR_DISOPD]
FOR INSERT
AS
Begin
/* BEGIN CWA SECTION - DO NOT TOUCH */Declare
@numrows int, @numnull int,@PKValues varchar(255),
@FKFields varchar(255),
@USR_DISOPD_PERIOD numeric(6,0) ,
@USR_DISOPD_CODREG varchar(6) ,
@USR_DISOPD_NUMDIA smallint ,@cwaerrmsg varchar(255),
@cwaerr int
Select @numrows=@@rowcount if @numrows=0return
Select @cwaerr=0if update(USR_DISOPD_PERIOD) Or
update(USR_DISOPD_CODREG)
begin
if (Select count(*)
From USR_DISOPI,insertedWhere (USR_DISOPI.USR_DISOPI_PERIOD =inserted.USR_DISOPD_PERIOD) and
(USR_DISOPI.USR_DISOPI_CODREG =inserted.USR_DISOPD_CODREG) ) != @numrows
begin
Select @cwaerr=1Declare cur Insensitive Cursor
for Select inserted.USR_DISOPD_PERIOD, inserted.USR_DISOPD_CODREG, inserted.USR_DISOPD_NUMDIA
from inserted
where not exists (Select * From USR_DISOPI where (USR_DISOPI.USR_DISOPI_PERIOD =inserted.USR_DISOPD_PERIOD) and
(USR_DISOPI.USR_DISOPI_CODREG =inserted.USR_DISOPD_CODREG) )
for Read Only
Open cur
fetch next from cur into @USR_DISOPD_PERIOD, @USR_DISOPD_CODREG, @USR_DISOPD_NUMDIA
if @@fetch_status=0begin
Select @PKValues = convert(varchar(255),@USR_DISOPD_PERIOD) + ',' +convert(varchar(255),@USR_DISOPD_CODREG) + ',' +convert(varchar(255),@USR_DISOPD_NUMDIA)
Select @cwaerrmsg='@?@1#USR_DISOPD#' + @PKValues + '#USR_DISOPD_PERIOD, USR_DISOPD_CODREG#'
Raiserror(@cwaerrmsg, 16,-1)
fetch next from cur into @USR_DISOPD_PERIOD, @USR_DISOPD_CODREG, @USR_DISOPD_NUMDIA
end
Deallocate cur
end
end
if @cwaerr=1Rollback Transaction
/* END CWA SECTION *//* BEGIN Usuario TRIGGER SECTION */UPDATE B
SET B.USR_DISOPD_SALDIA = B.USR_DISOPD_IMPDIA
FROM USR_DISOPI,INSERTED A,USR_DISOPD B
WHERE USR_DISOPI_PERIOD = B.USR_DISOPD_PERIOD
AND USR_DISOPI_CODREG = B.USR_DISOPD_CODREG
AND USR_DISOPI_PERIOD = A.USR_DISOPD_PERIOD
AND USR_DISOPI_CODREG = A.USR_DISOPD_CODREG
AND B.USR_DISOPD_NUMDIA = A.USR_DISOPD_NUMDIA
DECLARE @PERIOD AS VARCHAR(6),
@CODREG AS VARCHAR(15),
@IMPTOT AS NUMERIC(18,2),
@NROITM AS INT,@SALDIF AS NUMERIC(18,2),
@IMPDIA AS NUMERIC(18,2)
SELECT @PERIOD = USR_DISOPD_PERIOD,
@CODREG = USR_DISOPD_CODREG,
@NROITM = USR_DISOPD_NROITMFROM INSERTED
SELECT @IMPTOT = SUM(USR_DISOPD_IMPDIA)
FROM USR_DISOPD
WHERE USR_DISOPD_PERIOD = @PERIODAND USR_DISOPD_CODREG = @CODREGAND @NROITM = 3SELECT @SALDIF = USR_DISOPI_IMPDIFFROM USR_DISOPI
WHERE USR_DISOPI_PERIOD = @PERIODAND USR_DISOPI_CODREG = @CODREGSELECT @IMPDIA = SUM(USR_DISOPD_IMPDIA)
FROM INSERTED
WHERE USR_DISOPD_PERIOD = @PERIODAND USR_DISOPD_CODREG = @CODREGIF (@IMPTOT <> @SALDIF AND @NROITM = 3)
BEGIN
SET @cwaerrmsg = '@?@1#USR_DISOPD# ya que el importe debe ser igual al total diferido #'
SET @CWAERR = 1RAISERROR (@cwaerrmsg,16,- 1)
END
IF @NROITM > 3BEGIN
SET @cwaerrmsg = '@?@1#USR_DISOPD# ya que la cantidad de items no puede ser mayor a 3#'
SET @CWAERR = 1RAISERROR (@cwaerrmsg,16,- 1)
END
IF @CWAERR = 1ROLLBACK TRANSACTION
/* END Usuario TRIGGER SECTION */end
Valora esta pregunta


0