powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать журнал изменений?
5 сообщений из 5, страница 1 из 1
Как сделать журнал изменений?
    #32033600
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет

Хотелось бы реализовать журнал изменений БД.
Знаю что можно навешивать на каждую таблицу свой триггер и из них писать в общий журнал.
А можно ли навесить один триггер на всю БД?
Или есть что-нибудь подобное?
Общий вид журнала:
объект,поле,новое значение, дата изменения, пользователь, тип операции (добавление,редактирование,удаление)

Заранее благодарен.
...
Рейтинг: 0 / 0
Как сделать журнал изменений?
    #32033601
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL: Index->auditing
...
Рейтинг: 0 / 0
Как сделать журнал изменений?
    #32033700
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>BOL: Index->auditing

А можно поподробнее, что-то я в BOL об этом ничего не нашел ....
...
Рейтинг: 0 / 0
Как сделать журнал изменений?
    #32037066
john
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Greensunrise
Я бы тоже желал узнать поподробнее о BOL
...
Рейтинг: 0 / 0
Как сделать журнал изменений?
    #32037072
Oleg_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posmotrite mojet eto pomojet.

Код: plaintext
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
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать журнал изменений?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]