-- 3.5.58 Power
-- Добавляем таблицу Выключатель и переносим туда общие для всех конкретных типов выключателей характеристики
create table Выключатель
(
	Код_коммутатора			int NOT NULL,
	Время_откл			float NULL,
	Время_вкл			float NULL,
	Количество_допустимых_КЗ	int NULL,
	Код_типа_привода		int NULL,
	Оперативное_напряжение		float NULL,
	Число_циклов_ВО			int NULL,
	Число_циклов_ВО_под_нагр	int NULL,
	primary key(Код_коммутатора)
)
go
ALTER TABLE Выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Коммутатор
                              ON DELETE CASCADE
ALTER TABLE Выключатель
        ADD FOREIGN KEY (Код_типа_привода)
                              REFERENCES Справочник_типов_приводов
GO
-- Переносим данные из конкретных типов выключателей в Выключатель
declare @strSQL nvarchar(max)

set @strSQL='
insert into Выключатель
	(
		Код_коммутатора,
		Время_откл,
		Время_вкл,
		Количество_допустимых_КЗ,
		Код_типа_привода,
		Оперативное_напряжение,
		Число_циклов_ВО,
		Число_циклов_ВО_под_нагр
	)
select
		Код_коммутатора,
		Время_откл,
		Время_вкл,
		Количество_допустимых_КЗ,
		Код_типа_привода,
		Оперативное_напряжение,
		Число_циклов_ВО,
		Число_циклов_ВО_под_нагр

from ';
exec (@strSQL + 'Масляный_выключатель')
exec (@strSQL + 'Воздушный_выключатель')
exec (@strSQL + 'Вакуумный_выключатель')
exec (@strSQL + 'Элегазовый_выключатель')
exec (@strSQL + 'Выключатель_нагрузки')
exec (@strSQL + 'Электромагнитный_выключатель')
exec (@strSQL + 'Автоматический_выключатель')
GO
-- Удаляем связи для конкретных типов выключателей
declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Масляный_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Воздушный_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Вакуумный_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Элегазовый_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Выключатель_нагрузки'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Электромагнитный_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO

declare @table_name nvarchar(50)
declare @strSQL nvarchar(1024)

set @table_name=N'Автоматический_выключатель'
set @strSQL=''
select @strSQL = @strSQL + ' ALTER TABLE ' + @table_name + ' DROP CONSTRAINT '+ object_name(FK_Tab.id) 
from sysobjects FK_Tab 
where (xtype = 'F' or xtype = 'PK') AND object_id(@table_name)=parent_obj 

if @strSQL<>''  exec (@strSQL)
GO
-- Добавляем новые связи для конкретных типов выключателей
ALTER TABLE Масляный_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_масляных_выключателей
GO
ALTER TABLE Масляный_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель ON DELETE CASCADE
GO
ALTER TABLE Масляный_выключатель
        ADD FOREIGN KEY (Код_марки_масла)
                              REFERENCES Справочник_марок_масла
GO
ALTER TABLE Воздушный_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_воздушных_выключателей
GO
ALTER TABLE Воздушный_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель
                              ON DELETE CASCADE
GO
ALTER TABLE Вакуумный_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_вакуумных_выключателей
GO
ALTER TABLE Вакуумный_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель
                              ON DELETE CASCADE
GO
ALTER TABLE Элегазовый_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_элегазовых_выключателей
GO
ALTER TABLE Элегазовый_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель
                              ON DELETE CASCADE
GO
ALTER TABLE Выключатель_нагрузки
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_выключателей_нагрузки
GO
ALTER TABLE Выключатель_нагрузки WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель
                              ON DELETE CASCADE
GO
ALTER TABLE Электромагнитный_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Справочник_электромагнитных_выключателей
GO
ALTER TABLE Электромагнитный_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель ON DELETE CASCADE
GO
ALTER TABLE Автоматический_выключатель
        ADD FOREIGN KEY (Код_типа_выключателя)
                              REFERENCES Спр_автоматических_выкл
GO
ALTER TABLE Автоматический_выключатель WITH NOCHECK
        ADD FOREIGN KEY (Код_коммутатора)
                              REFERENCES Выключатель ON DELETE CASCADE
GO
-- Удаляем лишние поля из конкретных типов выключателей
declare @TableName nvarchar(max)

set @TableName = 'Масляный_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Воздушный_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Вакуумный_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Элегазовый_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Выключатель_нагрузки'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Электромагнитный_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

set @TableName = 'Автоматический_выключатель'
exec ('alter table '+ @TableName + ' drop column Время_откл')
exec ('alter table '+ @TableName + ' drop column Время_вкл')
exec ('alter table '+ @TableName + ' drop column Количество_допустимых_КЗ')
exec ('alter table '+ @TableName + ' drop column Код_типа_привода')
exec ('alter table '+ @TableName + ' drop column Оперативное_напряжение')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО')
exec ('alter table '+ @TableName + ' drop column Число_циклов_ВО_под_нагр')

GO
