17962d4233
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
70 lines
2.8 KiB
Transact-SQL
70 lines
2.8 KiB
Transact-SQL
-- OtOpcUa SQL Server historian backend - schema version 1.
|
|
-- $(Schema) is substituted by SqlServerSchemaBootstrapper (identifier-validated) BEFORE the script is split on GO lines.
|
|
-- Every statement is guarded so a re-run is a no-op.
|
|
IF SCHEMA_ID(N'$(Schema)') IS NULL EXEC(N'CREATE SCHEMA [$(Schema)]')
|
|
GO
|
|
IF OBJECT_ID(N'[$(Schema)].[SchemaVersion]', N'U') IS NULL
|
|
CREATE TABLE [$(Schema)].[SchemaVersion] (
|
|
Version int NOT NULL PRIMARY KEY,
|
|
AppliedUtc datetime2(7) NOT NULL)
|
|
GO
|
|
IF OBJECT_ID(N'[$(Schema)].[Tag]', N'U') IS NULL
|
|
CREATE TABLE [$(Schema)].[Tag] (
|
|
TagId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
|
Name nvarchar(400) NOT NULL CONSTRAINT UQ_Tag_Name UNIQUE,
|
|
DataType tinyint NOT NULL,
|
|
EngineeringUnit nvarchar(64) NULL,
|
|
Description nvarchar(400) NULL,
|
|
CreatedUtc datetime2(7) NOT NULL,
|
|
UpdatedUtc datetime2(7) NOT NULL)
|
|
GO
|
|
IF OBJECT_ID(N'[$(Schema)].[Sample]', N'U') IS NULL
|
|
CREATE TABLE [$(Schema)].[Sample] (
|
|
TagId int NOT NULL,
|
|
SourceTimeUtc datetime2(7) NOT NULL,
|
|
ValueKind tinyint NOT NULL,
|
|
NumValue float NULL,
|
|
IntValue bigint NULL,
|
|
StrValue nvarchar(max) NULL,
|
|
StatusCode int NOT NULL,
|
|
ServerTimeUtc datetime2(7) NOT NULL,
|
|
CONSTRAINT PK_Sample PRIMARY KEY CLUSTERED (TagId, SourceTimeUtc),
|
|
CONSTRAINT FK_Sample_Tag FOREIGN KEY (TagId) REFERENCES [$(Schema)].[Tag](TagId))
|
|
GO
|
|
IF OBJECT_ID(N'[$(Schema)].[Event]', N'U') IS NULL
|
|
CREATE TABLE [$(Schema)].[Event] (
|
|
EventId nvarchar(64) NOT NULL CONSTRAINT PK_Event PRIMARY KEY NONCLUSTERED,
|
|
SourceName nvarchar(400) NOT NULL,
|
|
AlarmId nvarchar(400) NOT NULL,
|
|
AlarmName nvarchar(400) NOT NULL,
|
|
AlarmTypeName nvarchar(100) NOT NULL,
|
|
Severity int NOT NULL,
|
|
EventKind nvarchar(50) NOT NULL,
|
|
Message nvarchar(max) NULL,
|
|
UserName nvarchar(200) NULL,
|
|
Comment nvarchar(max) NULL,
|
|
EventTimeUtc datetime2(7) NOT NULL,
|
|
ReceivedTimeUtc datetime2(7) NOT NULL)
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'CX_Event_Time' AND object_id = OBJECT_ID(N'[$(Schema)].[Event]'))
|
|
CREATE CLUSTERED INDEX CX_Event_Time ON [$(Schema)].[Event] (EventTimeUtc, EventId)
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Event_Source_Time' AND object_id = OBJECT_ID(N'[$(Schema)].[Event]'))
|
|
CREATE INDEX IX_Event_Source_Time ON [$(Schema)].[Event] (SourceName, EventTimeUtc)
|
|
GO
|
|
IF TYPE_ID(N'[$(Schema)].[SampleRow]') IS NULL
|
|
CREATE TYPE [$(Schema)].[SampleRow] AS TABLE (
|
|
SourceTimeUtc datetime2(7) NOT NULL PRIMARY KEY,
|
|
ValueKind tinyint NOT NULL,
|
|
NumValue float NULL,
|
|
IntValue bigint NULL,
|
|
StrValue nvarchar(max) NULL,
|
|
StatusCode int NOT NULL)
|
|
GO
|
|
IF TYPE_ID(N'[$(Schema)].[TimeRow]') IS NULL
|
|
CREATE TYPE [$(Schema)].[TimeRow] AS TABLE (T datetime2(7) NOT NULL PRIMARY KEY)
|
|
GO
|
|
IF NOT EXISTS (SELECT 1 FROM [$(Schema)].[SchemaVersion] WHERE Version = 1)
|
|
INSERT [$(Schema)].[SchemaVersion] (Version, AppliedUtc) VALUES (1, SYSUTCDATETIME())
|
|
GO
|