Форум: "Базы";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизКак в T-SQL удалить IDENTITY у поля? Найти похожие ветки
← →
Ольга (2005-08-29 12:19) [0]ALTER TABLE T1 ALTER COLUMN ID int
Как сюда вписать, что поле ID IDENTITY=false?
← →
Oksana © (2005-08-29 13:49) [1]похоже, что с помощью T-SQL никак
но после
SET IDENTITY_INSERT Т1 ON
можно передавать свое значение в identity column:
insert into Т1(id, ...) values ( 5,... )
← →
Nikolay M. © (2005-08-29 14:21) [2]Никак. Только созданием рядом новой таблицы или столбца. ЕМ, к примеру, создает таблицу - можете в этом убедиться, сняв у какой-нибудь таблицы IDENTITY и сгенерив потом change script.
← →
Ольга (2005-08-29 14:22) [3]Мне нужно убрать IDENTITY насовсем. Программно.
Неужели для этого есть только один путь:
создать временную таблицу;
переписать в нее данные;
удалить старую таблицу;
переименовать новую в старую?
← →
Nikolay M. © (2005-08-29 14:32) [4]
> Ольга (29.08.05 14:22) [3]
Рулить структурой БД программно - не есть гуд.
Повторюсь: можно создавать не новую таблицу, а столбец в таблице - скорее всего, это будет быстрее, чем перелив всей таблицы целиком.
← →
Ольга (2005-08-29 14:41) [5]
> [2]
Ну так у сервера нет мозгов, он действует в лоб (даже, если сменить тип поля с varchar(30) на varchar(40), он переписывает всю таблицу), а для человека с интеллектом должны же быть обходные пути (правда, моего интеллекта не хватило).
← →
ANB © (2005-08-29 14:42) [6]
> Ольга (29.08.05 14:41) [5]
- сервер делает абсолютно правильно. Смену типа лучше и самим так делать. Безопаснее.
← →
Ольга (2005-08-29 14:49) [7]Сдаюсь. Буду создавать поле. Дело, конечно, разовое, но в таблицах десятки млн. записей... Ну так и не мне "лопатой махать" - серверу.
← →
Nikolay M. © (2005-08-29 14:53) [8]
> Ольга (29.08.05 14:41) [5]
> Ну так у сервера нет мозгов,
Во-первых, ЕМ - это не сервер.
Во-вторых, делает он, как было сказано, абсолютно правильно.
В-третьих, человек с интеллектом может попробовать снять 7-й бит (128 dec = 80 hex) в столбце syscolumns.status, но делать это крайне не рекомендуется :)
← →
Anatoly Podgoretsky © (2005-08-29 15:01) [9]Ольга (29.08.05 14:49) [7]
И зачем это делать программно? Почему нельзя с помощью EM?
Если есть серьезные препятсвия, то тогда через временный столбец в 6 шагов, это системно независимый путь.
← →
Ольга (2005-08-29 15:12) [10]
> И зачем это делать программно?
База боевая, работает у N удаленных клиентов, которые максимум на что способны - это вслепую выполнить скрипт.
> в 6 шагов
довавить поле
переписать данные
удалить старое поле
переименовать новое
Какие 2 шага я пропустила (транзакцию я не считаю)?
← →
Val © (2005-08-29 17:35) [11]переименовать новое - 1 шаг?
← →
Anatoly Podgoretsky © (2005-08-29 17:57) [12]Ольга (29.08.05 15:12) [10]
довавить поле
переписать данные
удалить старое поле
переименовать новое
Какие 2 шага я пропустила (транзакцию я не считаю)?добавить временное поле
скопировать данные
удалить старое поле
создать новое поле
скопировать данные
удалить временное поле
← →
Anatoly Podgoretsky © (2005-08-29 17:58) [13]переименовать новое уже системно-зависимо, может быть не поддержано.
← →
paul_k © (2005-08-30 09:49) [14]Anatoly Podgoretsky © (29.08.05 17:57) [12]
пункт 1
отключить всех пользователей от базы кроме себя:)
← →
Ega23 © (2005-08-30 09:56) [15]2 Ольга (29.08.05 14:22) [3]
Мне нужно убрать IDENTITY насовсем. Программно.
Неужели для этого есть только один путь:
создать временную таблицу;
переписать в нее данные;
удалить старую таблицу;
переименовать новую в старую?
PowerDesigner генерит такой скрипт:
1. Создаёт временную таблицу
2. Insert into ... Select * from ...
3. Удаляет старую
4. Создаёт новую
5. Insert into ... Select * from ...
6. Удаляет временную.
← →
Anatoly Podgoretsky © (2005-08-30 10:04) [16]Ega23 © (30.08.05 09:56) [15]
Как правило так значительно быстрее, чем через поле, но теже 6 системно независимых шагов.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.026 c