-- тут требуются проверки, потому что возможно задним числом обновлена база 3.2 или 3.3 (до 3.2.5985 или 3.3.5983 соответственно)
if not exists( select 1 from dbo.syscolumns where id=object_id(N'[dbo].[Кабель]') AND name = 'Фазы')
    ALTER TABLE Кабель ADD Фазы int NULL
GO
  select * into #Cols from dbo.syscolumns where id=object_id(N'[dbo].[Отрезок_ВЛЭП]')

  if (select isnullable from #Cols where name = 'Код_параметра_провода') <> 1
    ALTER TABLE Отрезок_ВЛЭП ALTER COLUMN Код_параметра_провода int NULL
    
  if not exists( select * from #Cols where name = 'Фазы')
    ALTER TABLE Отрезок_ВЛЭП ADD Фазы int NULL

  if not exists( select * from #Cols where name = 'Код_параметра_провода_A')
    ALTER TABLE Отрезок_ВЛЭП ADD Код_параметра_провода_A int NULL

  if not exists( select * from #Cols where name = 'Код_параметра_провода_B')
    ALTER TABLE Отрезок_ВЛЭП ADD Код_параметра_провода_B int NULL

  if not exists( select * from #Cols where name = 'Код_параметра_провода_C')
    ALTER TABLE Отрезок_ВЛЭП ADD Код_параметра_провода_C int NULL

  if not exists( select * from #Cols where name = 'Код_параметра_провода_N')
    ALTER TABLE Отрезок_ВЛЭП ADD Код_параметра_провода_N int NULL

  if exists( select * from #Cols where name = 'Количество_проводов_A')
  begin
      -- переходим от модели 3.2.5985, где Фазы уже есть, и есть пофазное количество проводов к пофазным параметрам проводов
      -- теперь добавим недостающие параметры (с количеством проводов > 1 (из пофазных характеристик)) // пустые
    exec('INSERT INTO Спр_парам_проводов (Код_типа_провода, Количество_проводов)
      SELECT DISTINCT Код_типа_провода, Количество_проводов_A FROM Отрезок_ВЛЭП WHERE Количество_проводов_A > 1
	  AND NOT EXISTS(SELECT 1 FROM Спр_парам_проводов sp WHERE sp.Код_типа_провода = Код_типа_провода AND sp.Количество_проводов = Количество_проводов_A)')

    exec('INSERT INTO Спр_парам_проводов (Код_типа_провода, Количество_проводов)
      SELECT DISTINCT Код_типа_провода, Количество_проводов_B FROM Отрезок_ВЛЭП WHERE Количество_проводов_B > 1
	  AND NOT EXISTS(SELECT 1 FROM Спр_парам_проводов sp WHERE sp.Код_типа_провода = Код_типа_провода AND sp.Количество_проводов = Количество_проводов_B)')

    exec('INSERT INTO Спр_парам_проводов (Код_типа_провода, Количество_проводов)
      SELECT DISTINCT Код_типа_провода, Количество_проводов_C FROM Отрезок_ВЛЭП WHERE Количество_проводов_C > 1
	  AND NOT EXISTS(SELECT 1 FROM Спр_парам_проводов sp WHERE sp.Код_типа_провода = Код_типа_провода AND sp.Количество_проводов = Количество_проводов_C)')

    exec('INSERT INTO Спр_парам_проводов (Код_типа_провода, Количество_проводов)
      SELECT DISTINCT Код_типа_провода, Количество_проводов_N FROM Отрезок_ВЛЭП WHERE Количество_проводов_N > 1
	  AND NOT EXISTS(SELECT 1 FROM Спр_парам_проводов sp WHERE sp.Код_типа_провода = Код_типа_провода AND sp.Количество_проводов = Количество_проводов_N)')

    exec('
      UPDATE Отрезок_ВЛЭП SET
      Отрезок_ВЛЭП.Код_параметра_провода_A = Спр.Код_параметра_провода
      FROM Спр_парам_проводов Спр
      WHERE Спр.Код_типа_провода = Отрезок_ВЛЭП.Код_типа_провода_A
        AND Спр.Количество_проводов = Отрезок_ВЛЭП.Количество_проводов_A')

    exec('
      UPDATE Отрезок_ВЛЭП SET
      Отрезок_ВЛЭП.Код_параметра_провода_B = Спр.Код_параметра_провода
      FROM Спр_парам_проводов Спр
      WHERE Спр.Код_типа_провода = Отрезок_ВЛЭП.Код_типа_провода_B
        AND Спр.Количество_проводов = Отрезок_ВЛЭП.Количество_проводов_B')

    exec('
      UPDATE Отрезок_ВЛЭП SET
      Отрезок_ВЛЭП.Код_параметра_провода_C = Спр.Код_параметра_провода
      FROM Спр_парам_проводов Спр
      WHERE Спр.Код_типа_провода = Отрезок_ВЛЭП.Код_типа_провода_C
        AND Спр.Количество_проводов = Отрезок_ВЛЭП.Количество_проводов_C')

    exec('
      UPDATE Отрезок_ВЛЭП SET
      Отрезок_ВЛЭП.Код_параметра_провода_N = Спр.Код_параметра_провода
      FROM Спр_парам_проводов Спр
      WHERE Спр.Код_типа_провода = Отрезок_ВЛЭП.Код_типа_провода_N
        AND Спр.Количество_проводов = Отрезок_ВЛЭП.Количество_проводов_N')

    ALTER TABLE Отрезок_ВЛЭП DROP COLUMN Код_параметра_провода_A
    ALTER TABLE Отрезок_ВЛЭП DROP COLUMN Код_параметра_провода_B
    ALTER TABLE Отрезок_ВЛЭП DROP COLUMN Код_параметра_провода_C
    ALTER TABLE Отрезок_ВЛЭП DROP COLUMN Код_параметра_провода_N

  end

  drop table #Cols  
GO

SELECT S1.name AS FNAME, S2.name AS RNAME, SC.name AS CNAME INTO #Refs
FROM sysreferences INNER JOIN
     sysobjects S1 ON sysreferences.fkeyid = S1.id INNER JOIN
     sysobjects S2 ON sysreferences.rkeyid = S2.id INNER JOIN
     syscolumns SC ON sysreferences.fkeyid = SC.id AND sysreferences.fkey1 = SC.colid
WHERE (S1.name = 'Отрезок_ВЛЭП')

if not exists (select * from #Refs where RNAME = 'Спр_парам_проводов' and CNAME='Код_параметра_провода_A') 
  ALTER TABLE Отрезок_ВЛЭП
  ADD FOREIGN KEY (Код_параметра_провода_A)
  REFERENCES Спр_парам_проводов (Код_параметра_провода)

if not exists (select * from #Refs where RNAME = 'Спр_парам_проводов' and CNAME='Код_параметра_провода_B') 
  ALTER TABLE Отрезок_ВЛЭП
  ADD FOREIGN KEY (Код_параметра_провода_B)
  REFERENCES Спр_парам_проводов (Код_параметра_провода)

if not exists (select * from #Refs where RNAME = 'Спр_парам_проводов' and CNAME='Код_параметра_провода_C') 
  ALTER TABLE Отрезок_ВЛЭП
  ADD FOREIGN KEY (Код_параметра_провода_C)
  REFERENCES Спр_парам_проводов (Код_параметра_провода)

if not exists (select * from #Refs where RNAME = 'Спр_парам_проводов' and CNAME='Код_параметра_провода_N') 
  ALTER TABLE Отрезок_ВЛЭП
  ADD FOREIGN KEY (Код_параметра_провода_N)
  REFERENCES Спр_парам_проводов (Код_параметра_провода)

drop table #Refs
GO