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.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
--The procedure looks at the table you want to be audited and writes the INS, UPD, and DEL triggers
--automatically required for the auditing to work. The auditing requires a table called Progress
--to hold the audit information in so have provided the DDL for this as well.
--Typically you would write a cursor to repeatedly call the procedure for all your tables you want audited.
--You can rerun at anytime so as new columns get added the triggers pick them up.
--Typical call:- utl_AuditTriggerTable 'YourTable', 'Y', 'Y', 'Y', 0
--First the DDL which creates the table where the audits are stored.
--I call this Progress instead of Audit becuase in our database
--Progress is used to log all kinds of other events
CREATE TABLE [dbo].[Progress] (
[nProgressID] [int] IDENTITY ( 1 , 1 ) NOT NULL ,
[cProgressType] [char] ( 10 ) NOT NULL ,
[nProgress] [int] NULL ,
[cProgress] [varchar] ( 255 ) NULL ,
[cSource] [char] ( 30 ) NULL ,
[cWho] [CHAR] ( 10 ) NULL,
[dtLastUpd] [datetime] NULL
)
GO
CREATE TABLE [dbo].[ProgressTypes] (
[cProgressType] [char] ( 10 ) NOT NULL ,
[cProgressTypeDesc] [varchar] ( 255 ) NULL ,
)
GO
ALTER TABLE [dbo].[Progress] WITH NOCHECK ADD
CONSTRAINT [PK_PROGRESS] PRIMARY KEY CLUSTERED
(
[nProgressID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ProgressTypes] WITH NOCHECK ADD
CONSTRAINT [PK_PROGRESSTYPES] PRIMARY KEY CLUSTERED
(
[cProgressType]
) ON [PRIMARY]
GO
CREATE INDEX [FK_PROT_PRO] ON [dbo].[Progress]([cProgressType]) ON [PRIMARY]
GO
CREATE INDEX [IX_PRO_cSource] ON [dbo].[Progress]([cSource]) ON [PRIMARY]
GO
CREATE INDEX [IX_PRO_dtLastUpd] ON [dbo].[Progress]([dtLastUpd]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Progress] ADD
CONSTRAINT [FKC_PROT_PRO] FOREIGN KEY
(
[cProgressType]
) REFERENCES [dbo].[ProgressTypes] (
[cProgressType]
)
GO
INSERT progresstypes VALUES ('AUDIT_DEL','Table Audit on DELETES')
INSERT progresstypes VALUES ('AUDIT_INS','Table Audit on INSERTS')
INSERT progresstypes VALUES ('AUDIT_UPD','Table Audit on UPDATES')
GO
--Now the two procs...
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.utl_AuditTrigger_Create
@asTableName CHAR( 30 )
,@asTriggerType CHAR( 6 )
,@asBody1 VARCHAR( 8000 )
,@asBody2 VARCHAR( 8000 )
,@asBody3 VARCHAR( 8000 )
,@asBody4 VARCHAR( 8000 )
,@asUpdateJoin VARCHAR( 1000 )
,@anError INT OUTPUT
AS
/********************************************************************************************************************************************************
Purpose: Actually creates the triggers
Amendment Log
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date Who Comment
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
29/11/00 JHAYNE Initial Version
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
********************************************************************************************************************************************************/
SET NOCOUNT ON
DECLARE
@lsSource CHAR( 30 )
,@lsError VARCHAR( 255 )
,@lsDropTrigger VARCHAR( 255 )
,@lsHeader VARCHAR( 2000 )
,@lsFooter VARCHAR( 1000 )
,@lsBody1 VARCHAR( 4000 )
,@lsBody1a VARCHAR( 4000 )
,@lsBody2 VARCHAR( 4000 )
,@lsBody2a VARCHAR( 4000 )
,@lsBody3 VARCHAR( 4000 )
,@lsBody3a VARCHAR( 4000 )
,@lsBody4 VARCHAR( 4000 )
,@lsBody4a VARCHAR( 4000 )
,@lsWhere VARCHAR( 50 )
--Initialise
SELECT @lsSource = OBJECT_NAME(@@PROCID)
SELECT @lsWhere = CHAR( 13 )
--Drop Trigger
SELECT
@lsDropTrigger =
+ 'IF EXISTS (SELECT * FROM SysObjects WHERE Type = ''TR'' AND Name = ''trg_Audit_'
+ RTRIM(@asTableName)
+ '_'
+ LEFT(@asTriggerType, 3 )
+ ''') DROP TRIGGER trg_Audit_'
+ RTRIM(@asTableName)
+ '_'
+ LEFT(@asTriggerType, 3 )
EXEC(@lsDropTrigger)
SELECT
@lsHeader =
+ 'CREATE TRIGGER dbo.trg_Audit_'
+ RTRIM(@asTableName)
+ '_'
+ LEFT(@asTriggerType, 3 )
+ ' ON '
+ RTRIM(@asTableName) + CHAR( 13 )
+ 'FOR '
+ @asTriggerType + CHAR( 13 )
+ 'AS' + CHAR( 13 ) + CHAR( 10 ) + CHAR( 13 )
+ '%af_src_commbr_12
+ 'INSERT Progress' + CHAR(13)
+ CHAR(9) + '(' + CHAR(13)
+ CHAR(9) + 'cProgressType' + CHAR(13)
+ CHAR(9) + ',cSource' + CHAR(13)
+ CHAR(9) + ',cWho' + CHAR(13)
+ CHAR(9) + ',dtLastUpd' + CHAR(13)
+ CHAR(9) + ',cProgress' + CHAR(13)
+ CHAR(9) + ',nProgress' + CHAR(13)
+ CHAR(9) + ')' + CHAR(13)
+ 'SELECT' + CHAR(13)
+ CHAR(9) + '''AUDIT_' + LEFT(@asTriggerType, 3) + '''' + CHAR(13)
+ CHAR(9) + ',''' + RTRIM(@asTableName) + '''' + CHAR(13)
+ CHAR(9) + ',SUBSTRING(SUSER_SNAME(), CHARINDEX(''\'', SUSER_SNAME()) + 1 , 10 )' + CHAR(13)
+ CHAR(9) + ',GETDATE()' + CHAR(13)
+ CHAR(9) + ',LEFT(' + CHAR(13)
%af_src_commbr_13
SELECT
@lsBody1 = LEFT(@asBody1, 4000)
,@lsBody1a = SUBSTRING(@asBody1, 4001, 4000)
,@lsBody2 = LEFT(@asBody2, 4000)
,@lsBody2a = SUBSTRING(@asBody2, 4001, 4000)
,@lsBody3 = LEFT(@asBody3, 4000)
,@lsBody3a = SUBSTRING(@asBody3, 4001, 4000)
,@lsBody4 = LEFT(@asBody4, 4000)
,@lsBody4a = SUBSTRING(@asBody4, 4001, 4000)
%af_src_commbr_14
IF @asTriggerType = 'UPDATE' SELECT @asUpdateJoin = CHAR(9) + 'JOIN Deleted D ON' + RTRIM(@asUpdateJoin)
SELECT @lsFooter =
CHAR(13)
+ 'FROM' + CHAR(13)
+ CHAR(9) + CASE WHEN @asTriggerType = 'DELETE' THEN 'Deleted ' ELSE 'Inserted' END
+ ' I' + CHAR(13)
+ RTRIM(@asUpdateJoin) + CHAR(13)
+ @lsWhere
%af_src_commbr_15
IF @asBody2 IS NULL
EXEC (@lsHeader + @lsBody1 + @lsBody1a + @lsFooter)
ELSE
IF @asBody3 IS NULL
EXEC (@lsHeader + @lsBody1 + @lsBody1a + @lsBody2 + @lsBody2a + @lsFooter)
ELSE
IF @asBody4 IS NULL
EXEC (@lsHeader + @lsBody1 + @lsBody1a + @lsBody2 + @lsBody2a + @lsBody3 + @lsBody3a + @lsFooter)
ELSE
EXEC (@lsHeader + @lsBody1 + @lsBody1a + @lsBody2 + @lsBody2a + @lsBody3 + @lsBody3a + @lsBody4 + @lsBody4a + @lsFooter)
%af_src_commbr_16
IF @anError = 0
BEGIN
PRINT RTRIM(@asTriggerType) + ' trigger for table ' + RTRIM(@asTableName) + ' created'
END
ELSE
BEGIN
PRINT 'Could not create ' + RTRIM(@asTriggerType) + ' trigger for table ' + RTRIM(@asTableName)
COMMIT
END
SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.utl_AuditTriggerTable
@cTableName CHAR(30)
,@cIsAuditINSTrigger CHAR(1)
,@cIsAuditUPDTrigger CHAR(1)
,@cIsAuditDELTrigger CHAR(1)
,@nError INT OUTPUT
AS
%af_src_comm_1
DECLARE
@cProcName CHAR(30)
,@cProgress VARCHAR(255)
,@cColName CHAR(30)
,@cType CHAR(30)
,@cPK CHAR(1)
,@cIdentity CHAR(1)
,@cIdentityCol CHAR(30)
,@cColChar_I VARCHAR(255)
,@cColChar_D VARCHAR(255)
,@cINSBody1 VARCHAR(8000)
,@cINSBody2 VARCHAR(8000)
,@cINSBody3 VARCHAR(8000)
,@cINSBody4 VARCHAR(8000)
,@cUPDBody1 VARCHAR(8000)
,@cUPDBody2 VARCHAR(8000)
,@cUPDBody3 VARCHAR(8000)
,@cUPDBody4 VARCHAR(8000)
,@cUpdateJoin VARCHAR(1000)
,@cINSLine VARCHAR(1000)
,@cUPDLine VARCHAR(1000)
,@cINSVarToUse TINYINT
,@cUPDVarToUse TINYINT
,@cIsFirstCol CHAR(1)
%af_src_commbr_17
SET NOCOUNT ON
SELECT @cProcName = OBJECT_NAME(@@PROCID)
SELECT @nError = 0
SELECT @cINSVarToUse = 1, @cUPDVarToUse = 1
SELECT @cIsFirstCol = 'Y'
SELECT @cINSBody1 = '', @cINSBody2 = '', @cINSBody3 = '', @cINSBody4 = ''
SELECT @cUPDBody1 = '', @cUPDBody2 = '', @cUPDBody3 = '', @cUPDBody4 = ''
%af_src_commbr_18
DECLARE Columns CURSOR FOR
SELECT
C.Name cName
,ST.Name cType
,CASE WHEN C.AutoVal IS NULL THEN 'N' ELSE 'Y' END cIdentity
,CASE WHEN SK.ColID IS NULL THEN 'N' ELSE 'Y' END cPK
FROM
SysObjects T
JOIN SysColumns C ON C.ID = T.ID
JOIN SysTypes ST ON ST.XUserType = C.XUserType
LEFT OUTER JOIN SysIndexes SI ON SI.ID = T.ID AND (SI.Status = 2050 or SI.Status = 18450)
LEFT OUTER JOIN SysIndexKeys SK on SK.id = T.ID AND SK.IndID = SI.IndID AND SK.ColID = C.ColID
WHERE
T.Name = @cTableName
AND T.Type = 'U'
ORDER BY
4 DESC
,SK.KeyNo ASC
,C.ColOrder
SELECT @nError = @@ERROR
IF @nError <> 0
BEGIN
PRINT' Could not declare cursor for Columns'
RETURN
END
%af_src_commbr_19
OPEN Columns
%af_src_commbr_20
SELECT @cUpdateJoin = '', @cIdentityCol = '0'
WHILE 1=1
BEGIN
%af_src_commbr_21
FETCH NEXT FROM Columns INTO @cColName, @cType, @cIdentity, @cPK
%af_src_commbr_22
IF @@FETCH_STATUS = -1 BREAK
%af_src_commbr_23
IF @@FETCH_STATUS <> 0
BEGIN
SELECT @nError = -1
PRINT 'Row fetched is missing when looping through Table columns'
CLOSE Columns
DEALLOCATE Columns
RETURN
END
%af_src_commbr_24
IF @cIsFirstCol = 'Y'
BEGIN
IF @cPK = 'N'
BEGIN
SELECT @nError = -1
PRINT 'No Primary Key for table:' + RTRIM(@cTableName)
CLOSE Columns
DEALLOCATE Columns
RETURN
END
END
%af_src_commbr_25
If @cIdentityCol = '0' AND @cIdentity = 'Y'
BEGIN
SELECT @cIdentityCol = 'I.' + @cColName
END
%af_src_commbr_26
SELECT @cColChar_I =
CASE
WHEN RTRIM(@cType) = 'char' OR RTRIM(@cType) = 'varchar' OR RTRIM(@cType) = 'nvarchar' OR RTRIM(@cType) = 'text'
THEN 'I.' + RTRIM(@cColName)
WHEN RTRIM(@cType) = 'int' OR RTRIM(@cType) = 'smallint' OR RTRIM(@cType) = 'tinyint' OR RTRIM(@cType) = 'decimal' OR RTRIM(@cType) = 'numeric'
THEN 'CONVERT(CHAR( 30 ), ' + 'I.' + RTRIM(@cColName) + ')'
WHEN RTRIM(@cType) = 'datetime'
THEN 'CASE WHEN CONVERT(CHAR( 8 ), I.' + RTRIM(@cColName) + ', 114 ) = ''00: 00 : 00 '' THEN CONVERT(CHAR( 11 ), ' + 'I.' + RTRIM(@cColName) + ', 113 ) ELSE CONVERT(CHAR( 20 ), ' + 'I.' + RTRIM(@cColName) + ', 113 ) END'
ELSE '?'
END
SELECT @cColChar_D = REPLACE(@cColChar_I, 'I.', 'D.')
IF RTRIM(@cColChar_I) = '?'
BEGIN
PRINT 'Unexpected datatype: ' + RTRIM(@cType) + ' for column: ' + RTRIM(@cColName) + ' of table:' + RTRIM(@cTableName)
CLOSE Columns
DEALLOCATE Columns
RETURN
END
%af_src_commbr_27
IF @cPK = 'Y'
%af_src_commbr_28
BEGIN
SELECT @cUpdateJoin = RTRIM(@cUpdateJoin) + ' AND D.' + RTRIM(@cColName) + ' = I.' + RTRIM(@cColName)
SELECT @cINSLine = '+ ''' + CASE WHEN @cIsFirstCol = 'Y' THEN RTRIM(@cColName) ELSE ', ' + RTRIM(@cColName) END + ':'' + RTRIM(' + RTRIM(@cColChar_I) + ')'
SELECT @cUPDLine = @cINSLine
END
ELSE
%af_src_commbr_29
BEGIN
IF RTRIM(@cType) <> 'text'
BEGIN
SELECT @cINSLine = '+ CASE WHEN ISNULL(' + RTRIM(@cColChar_I) + ', '''') = '''' THEN RTRIM('''') ELSE '', ' + RTRIM(@cColName) + ':'' + RTRIM(' + RTRIM(@cColChar_I) + ') END'
SELECT @cUPDLine = '+ CASE WHEN ISNULL(' + RTRIM(@cColChar_I) + ', '''') = ISNULL(' + RTRIM(@cColChar_D) + ', '''') THEN RTRIM('''') ELSE '', ' + RTRIM(@cColName) + ':'' + RTRIM(ISNULL(' + RTRIM(@cColChar_D) + ', ''NULL'')) + ''-'' + RTRIM(ISNULL(' + RTRIM(@cColChar_I) + ', ''NULL'')) END'
END
ELSE
BEGIN
SELECT @cINSLine = ''
SELECT @cUPDLine = '' %af_src_commbr_30
END
END
%af_src_commbr_31
IF @cINSVarToUse = 1
BEGIN
%af_src_commbr_32
IF LEN(@cINSLine) + LEN(@cINSBody1) < 6900
SELECT @cINSBody1 = RTRIM(@cINSBody1) + CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
ELSE
BEGIN
SELECT @cINSVarToUse = 2
SELECT @cINSBody2 = CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
END
END
ELSE
IF @cINSVarToUse = 2
BEGIN
%af_src_commbr_33
IF LEN(@cINSLine) + LEN(@cINSBody2) < 6900
SELECT @cINSBody2 = RTRIM(@cINSBody2) + CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
ELSE
BEGIN
SELECT @cINSVarToUse = 3
SELECT @cINSBody3 = CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
END
END
ELSE
IF @cINSVarToUse = 3
BEGIN
%af_src_commbr_34
IF LEN(@cINSLine) + LEN(@cINSBody3) < 6900
SELECT @cINSBody3 = RTRIM(@cINSBody3) + CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
ELSE
BEGIN
SELECT @cINSVarToUse = 4
SELECT @cINSBody4 = CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
END
END
ELSE
IF @cINSVarToUse = 4
BEGIN
%af_src_commbr_35
IF LEN(@cINSLine) + LEN(@cINSBody4) < 6900
SELECT @cINSBody4 = RTRIM(@cINSBody4) + CHAR(9) + CHAR(9) + CHAR(9) + @cINSLine + CHAR(13)
ELSE
BEGIN
SELECT @nError = -1
PRINT 'Overflow of variable space on INS column: ' + RTRIM(@cColName) + ' of table:' + RTRIM(@cTableName)
CLOSE Columns
DEALLOCATE Columns
RETURN
END
END
%af_src_commbr_36
IF @cUPDVarToUse = 1
BEGIN
%af_src_commbr_37
IF LEN(@cUPDLine) + LEN(@cUPDBody1) < 6900
SELECT @cUPDBody1 = RTRIM(@cUPDBody1) + CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
ELSE
BEGIN
SELECT @cUPDVarToUse = 2
SELECT @cUPDBody2 = CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
END
END
ELSE
IF @cUPDVarToUse = 2
BEGIN
%af_src_commbr_38
IF LEN(@cUPDLine) + LEN(@cUPDBody2) < 6900
SELECT @cUPDBody2 = RTRIM(@cUPDBody2) + CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
ELSE
BEGIN
SELECT @cUPDVarToUse = 3
SELECT @cUPDBody3 = CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
END
END
ELSE
IF @cUPDVarToUse = 3
BEGIN
%af_src_commbr_39
IF LEN(@cUPDLine) + LEN(@cUPDBody3) < 6900
SELECT @cUPDBody3 = RTRIM(@cUPDBody3) + CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
ELSE
BEGIN
SELECT @cUPDVarToUse = 4
SELECT @cUPDBody4 = CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
END
END
ELSE
IF @cUPDVarToUse = 4
BEGIN
%af_src_commbr_40
IF LEN(@cUPDLine) + LEN(@cUPDBody4) < 6900
SELECT @cUPDBody4 = RTRIM(@cUPDBody4) + CHAR(9) + CHAR(9) + CHAR(9) + @cUPDLine + CHAR(13)
ELSE
BEGIN
SELECT @nError = -1
PRINT 'Overflow of variable space on UPD column: ' + RTRIM(@cColName) + ' of table:' + RTRIM(@cTableName)
CLOSE Columns
DEALLOCATE Columns
RETURN
END
END
SELECT @cIsFirstCol = 'N'
END
%af_src_commbr_41
CLOSE Columns
DEALLOCATE Columns
%af_src_commbr_42
IF @cINSVarToUse = 1
SELECT @cINSBody1 = RTRIM(@cINSBody1) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
IF @cINSVarToUse = 2
SELECT @cINSBody2 = RTRIM(@cINSBody2) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
IF @cINSVarToUse = 3
SELECT @cINSBody3 = RTRIM(@cINSBody3) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
SELECT @cINSBody4 = RTRIM(@cINSBody4) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
%af_src_commbr_43
IF @cUPDVarToUse = 1
SELECT @cUPDBody1 = RTRIM(@cUPDBody1) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
IF @cUPDVarToUse = 2
SELECT @cUPDBody2 = RTRIM(@cUPDBody2) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
IF @cUPDVarToUse = 3
SELECT @cUPDBody3 = RTRIM(@cUPDBody3) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
ELSE
SELECT @cUPDBody4 = RTRIM(@cUPDBody4) + CHAR(9) + CHAR(9) + ', 255 )' + CHAR(13) + CHAR(9) + ',' + RTRIM(@cIdentityCol)
%af_src_commbr_44
IF @cIsAuditINSTrigger = 'Y'
BEGIN
EXEC utl_AuditTrigger_Create
@cTableName
,'INSERT'
,@cINSBody1
,@cINSBody2
,@cINSBody3
,@cINSBody4
,''
,@nError OUTPUT
IF @nError <> 0 RETURN %af_src_commbr_45
END
%af_src_commbr_46
IF @cIsAuditDELTrigger = 'Y'
BEGIN
EXEC utl_AuditTrigger_Create
@cTableName
,'DELETE'
,@cINSBody1
,@cINSBody2
,@cINSBody3
,@cINSBody4
,''
,@nError OUTPUT
IF @nError <> 0 RETURN %af_src_commbr_47
END
%af_src_commbr_48
IF @cIsAuditUPDTrigger = 'Y'
BEGIN
SELECT @cUpdateJoin = SUBSTRING(@cUpdateJoin,5, LEN(@cUpdateJoin) - 4)
EXEC utl_AuditTrigger_Create
@cTableName
,'UPDATE'
,@cUPDBody1
,@cUPDBody2
,@cUPDBody3
,@cUPDBody4
,@cUpdateJoin
,@nError OUTPUT
IF @nError <> 0 RETURN --Error already reported
END
--End Proc
SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO