AnP/SQLServer/AnP.01.base.server.sql
2026-07-13 07:51:35 +02:00

117 lines
4.4 KiB
Transact-SQL

if (select top 1 0 from sys.databases where name = 'AnP') is null create database AnP collate Latin1_General_100_CI_AS_SC_UTF8
go
use AnP
if object_id(N'dbo.common_tables_drop', N'P') is not null drop procedure dbo.common_tables_drop
go
create procedure dbo.common_tables_drop as begin set nocount on
if object_id(N'dbo.Procedures', N'U') is not null drop table dbo.Procedures
if object_id(N'dbo.Databases', N'U') is not null drop table dbo.Databases
end
go
if object_id(N'dbo.common_tables_create', N'P') is not null drop procedure dbo.common_tables_create
go
create procedure dbo.common_tables_create as begin set nocount on
declare @table_names varchar(max) = ''
if object_id(N'dbo.HistoryModes', N'U') is null begin
create table dbo.HistoryModes(
id integer not null identity(1, 1),
[name] varchar(16) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_history_modes_date_in default getdate(),
date_out datetime2,
constraint pk_history_modes primary key clustered(id),
constraint uq_history_modes_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint ck_history_modes_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
insert into dbo.HistoryModes([name]) values('insert'), ('update'), ('delete'), ('unknown')
end
if object_id(N'dbo.Databases', N'U') is null create table dbo.Databases(
id integer not null identity(1, 1),
[name] varchar(32) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_databases_date_in default getdate(),
date_out datetime2,
constraint pk_databases primary key clustered(id),
constraint uq_databases_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint ck_databases_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
if object_id(N'dbo.Procedures', N'U') is null create table dbo.Procedures(
id integer not null identity(1, 1),
[database] integer not null,
[name] varchar(32) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_procedures_date_in default getdate(),
date_out datetime2,
constraint pk_procedures primary key clustered(id),
constraint fk_procedures_database foreign key([database]) references dbo.Databases(id)
on update no action
on delete no action,
constraint uq_procedures_name unique nonclustered ([database] asc, [name] asc) with (fillfactor = 90),
constraint ck_procedures_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
end
go
if object_id(N'dbo.procedure_get_id', N'P') is not null drop procedure dbo.procedure_get_id
go
create procedure dbo.procedure_get_id (
@database varchar(32),
@name varchar(32),
@id integer output
) as begin set nocount on
declare @database_id integer = (select id from dbo.Databases where [name] = @database)
if @database_id is null begin
insert into dbo.Databases ([name]) values (@database)
set @database_id = scope_identity()
end
set @id = (select id from dbo.Procedures where [database] = @database_id and [name] = @name)
if @id is null begin
insert into dbo.Procedures ([database], [name]) values (@database_id, @name)
set @id = scope_identity()
end
end
go
execute dbo.common_tables_create
if object_id(N'dbo.bw', N'FN') is not null drop function dbo.bw
go
create function dbo.bw(
@number bigint,
@bits smallint
) returns bigint begin
return (case
when @bits > 0 then @number * power(cast(2 as bigint), @bits)
when @bits < 0 then @number / power(cast(2 as bigint), -@bits)
else @number end)
end
go
if object_id(N'dbo.history_mode_get', N'P') is not null drop procedure dbo.history_mode_get
go
create procedure dbo.history_mode_get(
@insert integer output,
@update integer output,
@delete integer output,
@unknown integer output
) as begin set nocount on
set @insert = (select top 1 id from dbo.HistoryModes where [name] = 'insert')
set @update = (select top 1 id from dbo.HistoryModes where [name] = 'update')
set @delete = (select top 1 id from dbo.HistoryModes where [name] = 'delete')
set @unknown = (select top 1 id from dbo.HistoryModes where [name] = 'unknown')
end
go