-
Notifications
You must be signed in to change notification settings - Fork 9.1k
Expand file tree
/
Copy pathSetup.sql
More file actions
91 lines (75 loc) · 2.59 KB
/
Setup.sql
File metadata and controls
91 lines (75 loc) · 2.59 KB
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
USE AdventureWorks2016_EXT;
GO
-- Create regular table
DROP TABLE IF EXISTS [dbo].[TestSequentialKey];
GO
CREATE TABLE [dbo].[TestSequentialKey](
[DatabaseLogID] [bigint] IDENTITY(1,1) NOT NULL,
[PostTime] [datetime2] NOT NULL,
[DatabaseUser] [sysname] NOT NULL,
[Event] [sysname] NOT NULL,
[Schema] [sysname] NULL,
[Object] [sysname] NULL,
[TSQL] [nvarchar](max) NOT NULL
CONSTRAINT [PK_TestSequentialKey_DatabaseLogID] PRIMARY KEY NONCLUSTERED
(
[DatabaseLogID] ASC
));
CREATE CLUSTERED INDEX CIX_TestSequentialKey_PostTime ON TestSequentialKey (PostTime);
GO
-- Create optimized table
DROP TABLE IF EXISTS [dbo].[TestSequentialKey_Optimized];
GO
CREATE TABLE [dbo].[TestSequentialKey_Optimized](
[DatabaseLogID] [bigint] IDENTITY(1,1) NOT NULL,
[PostTime] [datetime2] NOT NULL,
[DatabaseUser] [sysname] NOT NULL,
[Event] [sysname] NOT NULL,
[Schema] [sysname] NULL,
[Object] [sysname] NULL,
[TSQL] [nvarchar](max) NOT NULL
CONSTRAINT [PK_TestSequentialKey_Optimized_DatabaseLogID] PRIMARY KEY NONCLUSTERED
(
[DatabaseLogID] ASC
)
WITH (OPTIMIZE_FOR_SEQUENTIAL_KEY=ON));
CREATE CLUSTERED INDEX CIX_TestSequentialKey_Optimized_PostTime ON TestSequentialKey_Optimized (PostTime) WITH (OPTIMIZE_FOR_SEQUENTIAL_KEY=ON);
GO
-- Create INSERT stored procedure
CREATE OR ALTER PROCEDURE usp_InsertLogRecord @Optimized bit = 0 AS
DECLARE @PostTime datetime2 = SYSDATETIME(), @User sysname, @Event sysname, @Schema sysname, @Object sysname, @TSQL nvarchar(max)
SELECT @User = name
FROM sys.sysusers
WHERE issqlrole = 0 and hasdbaccess = 1 and status = 0
ORDER BY NEWID();
SELECT @Object = t.name, @Schema = s.name
FROM sys.tables t
INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
ORDER BY NEWID();
IF DATEPART(ms, @PostTime) % 4 = 0
BEGIN
SET @Event = N'SELECT';
SET @TSQL = N'SELECT * FROM ' + @Schema + '.' + @Object
END
ELSE IF DATEPART(ms, @PostTime) % 4 = 1
BEGIN
SET @Event = N'INSERT';
SET @TSQL = N'INSERT ' + @Schema + '.' + @Object + ' SELECT * FROM ' + @Schema + '.' + @Object
END
ELSE IF DATEPART(ms, @PostTime) % 4 = 2
BEGIN
SET @Event = N'UPDATE';
SET @TSQL = N'UPDATE ' + @Schema + '.' + @Object + ' SET 1=1';
END
ELSE IF DATEPART(ms, @PostTime) % 4 = 3
BEGIN
SET @Event = N'DELETE';
SET @TSQL = N'DELETE FROM ' + @Schema + '.' + @Object + ' WHERE 1=1';
END
IF @Optimized = 1
INSERT TestSequentialKey_Optimized (PostTime, DatabaseUser, [Event], [Schema], [Object], [TSQL])
VALUES (@PostTime, @User, @Event, @Schema, @Object, @TSQL);
ELSE
INSERT TestSequentialKey (PostTime, DatabaseUser, [Event], [Schema], [Object], [TSQL])
VALUES (@PostTime, @User, @Event, @Schema, @Object, @TSQL);
GO