Maideen Abdul Kader Ответов: 1

Как удалить столбец identity в таблице SQL?


Привет У меня есть проблема в таблице MSSQL 2014. В моем проекте у меня есть много таблиц(136)

Теперь мне нужно удалить столбец идентификаторов 'СНО' когда я использовал нормальную команду 'изменить таблицу AD_FGMaster удалить столбец СНО '

Ошибка: "объект' PK_AD_FGMaster 'зависит от столбца 'SNo'.

Потому что она привязана к очень многим взглядам. Его трудно найти.
Есть ли какой-нибудь способ отбросить столбец в таблице, а также в представлении?

Пожалуйста, посоветуйте мне.

Спасибо
Мейден

Что я уже пробовал:

Я попробовал этот код "ALTER TABLE AD_FGMaster DROP COLUMN SNo"

Но ошибка есть
Msg 5074, Уровень 16, Состояние 1, Строка 5
Объект 'PK_AD_FGMaster' зависит от столбца 'SNo'.
Msg 5074, Уровень 16, Состояние 1, Строка 5
Объект 'FK_AD_FGMaster_sno' зависит от столбца 'SNo'.
Msg 5074, Уровень 16, Состояние 1, Строка 5
Объект 'FK_AD_FGMaster_sno' зависит от столбца 'SNo'.
Msg 4922, Уровень 16, Состояние 9, Строка 5
ALTER TABLE DROP COLUMN SNo не удалось, так как один или несколько объектов обращаются к этому столбцу.

1 Ответов

Рейтинг:
5

OriginalGriff

Это означает, что в вашей таблице в качестве первичного ключа задан столбец IDENTITY, и вы не можете просто удалить первичный ключ - вам нужно сначала удалить ключ или назначить другой столбец как PK first.

Но...ты уверен, что хочешь этого? Первичные ключи важны - они предотвращают столкновение двух идентичных строк и вызывают серьезные проблемы, а также часто действуют как связующее поле между двумя таблицами в отношениях внешнего ключа. Если вы удалите столбец идентификаторов, вы, скорее всего, повредите остальную часть вашей базы данных без надежды на восстановление.

Вместо того чтобы удалять его, попробуйте создать новую таблицу без него и скопировать все записи. Если это сработает, у вас не будет дубликатов. Теперь вы можете архивировать свою" старую " таблицу, удалить ее и переименовать "новую". Если все это работает, то у вас тоже нет проблем с внешними ключами.
Но я бы долго и упорно думал, прежде чем удалять столбец первичного ключа!


Maideen Abdul Kader

Спасибо за быстрый ответ.
Вы правы, что первичный ключ очень важен. Сначала я удалю все и создам новое. Потому что некоторые имена первичных ключей таблиц совершенно неверны, как "SNo" и "SONo" из предыдущего программиста. Теперь мне нужно изменить все как "ID".
Трудно найти в представлениях много представлений (210) таблицы (136). Это моя проблема. Я недавно назначен, чтобы исправить это. Есть какие-нибудь идеи?
Пожалуйста, посоветуйте мне...

OriginalGriff

Во - первых, я бы абсолютно убедился, что работаю с копией разработки БД, а не с той, к которой пытается получить доступ любой другой пользователь, и уж точно не с производственной копией! :смеяться:
Тогда я бы поддержал его-потому что будут ошибки.
Затем я бы посмотрел, какое программное обеспечение использует существующий формат - потому что его нужно будет менять параллельно.
Затем я бы использовал SSMS, чтобы записать всю структуру БД в текстовый файл и начать точно определять, что с чем связано.
Затем я бы написал конвертер: ввел исходную БД, вывел новую БД с новой (предложенной) структурой и скопировал данные.
Затем новая БД, которая против модифицированного программного обеспечения. Повторяйте цикл, пока он не заработает в dev, и вы получите конвертер, который можно запустить против производственной БД, чтобы преобразовать ее структуру и скопировать ее данные (как только вы создадите резервную копию и этого), а затем выпустить пересмотренное программное обеспечение.

Но, насколько я знаю, простого решения нет - вы смотрите на большой беспорядок, который нуждается в очистке, и большая часть этого потребует ручной работы в той или иной форме! Важно создать инструмент таким образом, чтобы, когда вы будете готовы, вы могли "жить" с минимальным воздействием на производственную сторону, и чтобы программное обеспечение, использующее БД, также было подготовлено к работе с новой структурой одновременно. В противном случае вы столкнетесь с серьезными проблемами в день выпуска или остановите производство на неделю или две, чтобы перенести его.

Maideen Abdul Kader

Большое вам спасибо за Ваше мнение и советы. Я согласен с вами.
Есть много работы, чтобы сделать. Я скоро начну на следующей неделе.
Спасибо,
Мейден

OriginalGriff

Пожалуйста!