mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
98 lines
2.6 KiB
Transact-SQL
98 lines
2.6 KiB
Transact-SQL
USE master;
|
|
GO
|
|
|
|
CREATE DATABASE SequentialKeySampleDB;
|
|
GO
|
|
|
|
USE SequentialKeySampleDB;
|
|
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
|