You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.5 KiB
125 lines
2.5 KiB
IF EXISTS (
|
|
SELECT * FROM dbo.sysobjects
|
|
WHERE (
|
|
id = OBJECT_ID('dbo.event_data') AND
|
|
OBJECTPROPERTY(id, 'IsUserTable') = 1
|
|
)
|
|
)
|
|
DROP TABLE dbo.event_data
|
|
|
|
IF EXISTS (
|
|
SELECT * FROM dbo.sysobjects
|
|
WHERE (
|
|
id = OBJECT_ID('dbo.event_main') AND
|
|
OBJECTPROPERTY(id, 'IsUserTable') = 1
|
|
)
|
|
)
|
|
DROP TABLE dbo.event_main
|
|
|
|
IF EXISTS (
|
|
SELECT * FROM dbo.sysobjects
|
|
WHERE (
|
|
id = OBJECT_ID('dbo.event_data_type') AND
|
|
OBJECTPROPERTY(id, 'IsUserTable') = 1
|
|
)
|
|
)
|
|
DROP TABLE dbo.event_data_type
|
|
|
|
|
|
IF EXISTS (
|
|
SELECT * FROM dbo.sysobjects
|
|
WHERE (
|
|
id = OBJECT_ID('dbo.report_event') AND
|
|
OBJECTPROPERTY(id, 'IsProcedure') = 1
|
|
)
|
|
)
|
|
DROP PROCEDURE dbo.report_event
|
|
|
|
GO
|
|
|
|
CREATE TABLE dbo.event_main (
|
|
event_id uniqueidentifier NOT NULL
|
|
PRIMARY KEY CLUSTERED,
|
|
record_timestamp datetime NOT NULL
|
|
)
|
|
|
|
GO
|
|
|
|
CREATE TABLE dbo.event_data_type (
|
|
attribute_data_type tinyint NOT NULL
|
|
PRIMARY KEY CLUSTERED,
|
|
attribute_data_type_name nvarchar (128) NOT NULL
|
|
)
|
|
|
|
GO
|
|
|
|
CREATE TABLE dbo.event_data (
|
|
event_id uniqueidentifier NOT NULL
|
|
REFERENCES event_main (event_id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE,
|
|
attribute_type nvarchar (64) NOT NULL,
|
|
attribute_value nvarchar (1024) NULL,
|
|
attribute_data_type tinyint NOT NULL
|
|
FOREIGN KEY REFERENCES event_data_type (attribute_data_type)
|
|
)
|
|
|
|
GO
|
|
|
|
INSERT INTO dbo.event_data_type
|
|
VALUES (0, 'nonNegativeInteger')
|
|
|
|
INSERT INTO dbo.event_data_type
|
|
VALUES (1, 'string')
|
|
|
|
INSERT INTO dbo.event_data_type
|
|
VALUES (2, 'hexBinary')
|
|
|
|
INSERT INTO dbo.event_data_type
|
|
VALUES (3, 'ipv4Address')
|
|
|
|
INSERT INTO dbo.event_data_type
|
|
VALUES (4, 'sqlDateTime')
|
|
|
|
GO
|
|
|
|
CREATE PROCEDURE dbo.report_event
|
|
@doc ntext
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @idoc int
|
|
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
|
|
|
|
DECLARE @event_id uniqueidentifier
|
|
SET @event_id = NEWID()
|
|
|
|
DECLARE @record_timestamp datetime
|
|
SET @record_timestamp = GETUTCDATE()
|
|
|
|
BEGIN TRANSACTION
|
|
|
|
INSERT dbo.event_main VALUES (
|
|
@event_id,
|
|
@record_timestamp
|
|
)
|
|
|
|
INSERT dbo.event_data
|
|
SELECT
|
|
@event_id,
|
|
attribute_type,
|
|
attribute_value,
|
|
attribute_data_type
|
|
FROM OPENXML(@idoc, '/Event/*')
|
|
WITH (
|
|
attribute_type nvarchar(64) '@mp:localname',
|
|
attribute_value nvarchar(1024) 'child::text()',
|
|
attribute_data_type tinyint '@data_type'
|
|
)
|
|
|
|
COMMIT TRANSACTION
|
|
|
|
EXEC sp_xml_removedocument @idoc
|
|
|
|
GO
|