Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Превратить индекс UNIQUE в PRIMARY  [new]
П_а_в_е_л_
Member

Откуда:
Сообщений: 5
Есть ли способ, чтобы легким движением руки превратить уникальный индекс в primary key. Есть вот уникальный индекс по двум полям, NULL в них не допускается, и нужно (для репликации) переобозначить его как primary key. Сложность - что таблица очень большая и желательно (можно ли ?) обойтись без громоздких процедур создания индекса с нуля.
23 сен 11, 16:23    [11327797]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
П_а_в_е_л_,

Как изменить первичные ключи (визуальные инструменты для баз данных)
http://technet.microsoft.com/ru-ru/library/ms189251.aspx
23 сен 11, 16:52    [11328109]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
trew,

какие ,нахрен визуальные инструменты ? Два ALTER всего.
23 сен 11, 17:07    [11328260]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Ken@t
trew,

какие ,нахрен визуальные инструменты ? Два ALTER всего.
Можно и один!
23 сен 11, 17:12    [11328320]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
П_а_в_е_л_
Member

Откуда:
Сообщений: 5
Ken@t
Два ALTER - и индекс начнет создаваться с нуля ?
23 сен 11, 17:13    [11328338]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
iap,

ну да ))) заморочка в имени констрейна. Хотя если афтору барабаново - один альтер.
23 сен 11, 17:20    [11328416]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
П_а_в_е_л_,

что значит с нуля ?

create table #T
(
 ID INT NOT NULL
 )
GO

ALTER TABLE #T ADD CONSTRAINT UQ_T UNIQUE (ID)
GO

ALTER TABLE #T DROP CONSTRAINT UQ_T 
GO

ALTER TABLE #T ADD CONSTRAINT PK_T PRIMARY KEY (ID)
GO

DROP TABLE #T
GO
23 сен 11, 17:26    [11328483]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
П_а_в_е_л_
Member

Откуда:
Сообщений: 5
Ken@t

ALTER TABLE #T ADD CONSTRAINT PK_T PRIMARY KEY (ID)

- начнет создаваться индекс (с нуля), что на большой таблице потребует N-ое количество лет времени, разве не так ?
23 сен 11, 17:31    [11328527]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
нет вообще никакой возможности превратить индекс в ограничение целостности.
23 сен 11, 17:35    [11328572]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
П_а_в_е_л_
Ken@t

ALTER TABLE #T ADD CONSTRAINT PK_T PRIMARY KEY (ID)

- начнет создаваться индекс (с нуля), что на большой таблице потребует N-ое количество лет времени, разве не так ?


А о каких объемах идет разговор если не секрет?
23 сен 11, 17:35    [11328580]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
П_а_в_е_л_
Member

Откуда:
Сообщений: 5
Зайцев Фёдор,

абыдна
23 сен 11, 17:39    [11328625]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Зайцев Фёдор
нет вообще никакой возможности превратить индекс в ограничение целостности.
Нет необходимости,
ибо FOREIGN KEY легко ссылается на поле,
если по нему создан любой уникальный индекс
с любым констрейнтом или без оных.
23 сен 11, 17:42    [11328651]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
iap
Нет необходимости,
ибо FOREIGN KEY легко ссылается на поле,
если по нему создан любой уникальный индекс

А вообще-то в курсе, спасибо)
iap
с любым констрейнтом или без оных.

ага, с CHECK ))


дело не в необходимости, а вообще в возможности
23 сен 11, 17:47    [11328701]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
?????
Guest
iap
Зайцев Фёдор
нет вообще никакой возможности превратить индекс в ограничение целостности.
Нет необходимости,
ибо FOREIGN KEY легко ссылается на поле,
если по нему создан любой уникальный индекс
с любым констрейнтом или без оных.

а для репликации, на которую ссылается автор, не нужен ПК?
23 сен 11, 17:50    [11328726]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
П_а_в_е_л_
Member

Откуда:
Сообщений: 5
Alexandr Kr.
П_а_в_е_л_
Ken@t

ALTER TABLE #T ADD CONSTRAINT PK_T PRIMARY KEY (ID)

- начнет создаваться индекс (с нуля), что на большой таблице потребует N-ое количество лет времени, разве не так ?


А о каких объемах идет разговор если не секрет?


Ну я утрирую конечно, но факт то - что это нежелательно, т.к. полдня база будет недоступна для пользователей.
23 сен 11, 17:54    [11328761]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
П_а_в_е_л_

Ну я утрирую конечно, но факт то - что это нежелательно, т.к. полдня база будет недоступна для пользователей.


Кто мешает создать ПК констрейнт ночью, когда никто уже не работает? Или у тебя система 24х7? Тогда делай в выходные.
23 сен 11, 21:03    [11329773]     Ответить | Цитировать Сообщить модератору
 Re: Превратить индекс UNIQUE в PRIMARY  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
flexgen
Или у тебя система 24х7? Тогда делай в выходные.
цифра 7 означает и выходные :-)

Вообще для таких случаем существует версия Enterprise Edition.

Есть и другой вариант, требующий времени разработчиков:
Сделать 2 паралельных таблицы 1 и 2
На основную таблицу (0) навесить триггер, пишущий изменения в 1.
В 2 залить все записи из 0.
Построить ПК
Дписать записи из 1 в 2
Переименовать таблицы 2 в 0

Простенько и со вкусом :-)

Я так делал, когда нужно было изменить индекс на ПК на большой (относительно сервера) таблице. Всего за неделю залилось, и на Enterprise Edition съэкономили! :-)
23 сен 11, 21:10    [11329798]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить