Я исправляю проблемы в новой базе данных, созданной третьей стороной.
СТОРОННОЕ ПРИМЕЧАНИЕ: я только что присоединился к компании, которая первоначально наняла третье лицо. Новой базе данных менее двух недель, и она была запущена в мои первые несколько дней работы.
Эта база данных должна была соответствовать схеме старой базы данных, к сожалению, третья сторона забыла включить несколько ограничений, триггеров и индексов.
Обе базы данных являются SQL Server 2012
Я хочу изменить таблицу, которая в настоящее время не имеет первичного ключа, который был в старой схеме. Ниже приведены упрощенные операторы создания таблиц
Текущее производство
CREATE TABLE [dbo].[Table](
[field] [varchar](255) NULL,
[data] [varchar](255) NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
GO
Таблица из старой базы данных
CREATE TABLE [dbo].[Table](
[id] [int] NOT NULL,
[field] [varchar](255) NULL,
[data] [varchar](255) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Будет ли это серьезно повлиять на изменение производственной таблицы и добавление обратно в первичный ключ вместе с индексом, существующим в старой базе данных? Есть ли руководство по лучшей практике для этого?
Это подходящий sql для изменения производственной таблицы
ALTER TABLE [dbo].[Table] ADD PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
- Есть ли программная причина, по которой сторонний разработчик мог бы решить использовать IDENTITY вместо репликации первичного ключа в новой схеме?
РЕДАКТИРОВАТЬ: Мой план основан на рекомендации, приведенной в ответах
Учитывая, что обработка запроса должна быть выполнена, я буду запускать Alters в нерабочие часы. Я решил использовать ALTER вместо очистки таблицы и ее повторного заполнения, основываясь на бизнес-потребностях моей среды.
Я подтвердил, что столбец IDENTITY в настоящее время уникален, используя этот запрос
SELECT DISTINCT(id), COUNT(id)
FROM Table
GROUP BY id
HAVING Count(id) > 1
Если вышеприведенное остается верным, то я буду запускать следующее в непиковые часы:
ALTER TABLE [dbo].[Table] ADD CONSTRAINT PK_Table PRIMARY KEY CLUSTERED
(
[id] ASC
)