Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2011, 18:49   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Правильно СУБД делает, что не позволяет IDENTITY навесить на существующее поле. IDENTITY предполагает при добавлении записей использовать некую нумерацию с начальной точкой отсчета и шагом. По умолчанию это 1,1. Последнее вставленное значение СУБД хранит у себя. И что оно будет делать с существующим полем при попытке навесить на него IDENTITY? Вот убрать IDENTITY с поля всегда пожалуйста
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.10.2011, 20:14   #12
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Жаль, очень жаль!
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 08.10.2011, 12:35   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Жаль, очень жаль!
Э-э-э... Гардемарины, отставить. Стилет пришел.
Короче вкратце: ALTER TABLE не умеет такого делать. поэтому в Сиквеле придуманы системные процедуры, которые гораздо круче чем стандартный SQL.
Чтоб сменить поле можно провести такую операцию
Код:
-- Дропаем колонку, со старым типом
ALTER TABLE dbo.Table_1 DROP column id
-- Создаем новую с временным именем
ALTER TABLE dbo.Table_1 ADD id_temp INT identity (1,1)
-- Переименовываем ее.
EXECUTE sp_rename N'dbo.Table_1.id_temp', N'id', 'COLUMN'
И все.

Теперь насчет добавления не в хвост. Во-первых: Зачем? На такие вещи внимания не обращают, потому что правильные программисты в запросе укажут порядок полей для выборки, и последнее может идти первым
Во-вторых: Раз уж так хоцца, можно провести эту операцию в мастере SQL Server Manager Studio ручками а после попросить его показать скрипт, который эту визуальную операцию в ядре выполняет. И вот что можно увидеть:
Код:
CREATE TABLE dbo.Tmp_Table_1
	(
	id2 int NOT NULL IDENTITY (1, 1),
	t nchar(10) NULL
	)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table_1 OFF
GO
IF EXISTS(SELECT * FROM dbo.Table_1)
	 EXEC('INSERT INTO dbo.Tmp_Table_1 (t)
		SELECT w FROM dbo.Table_1 WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Table_1
GO
EXECUTE sp_rename N'dbo.Tmp_Table_1', N'Table_1', 'OBJECT' 
GO
COMMIT
т.е смысл прост и банален - создаем временную таблицу, наполняем ее данными из старой, не учитывая передвинутого в голову поля, и переименовываем таблицу
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2011, 23:33   #14
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Виталик, спасибо)) Весы по-прежнему не работают пока(((
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать отчет на основе существующей таблицы RGZZ Microsoft Office Excel 2 28.07.2011 19:07
Разработчик|макрос. Добавление элементов к уже существующей таблице. DarkGuard Microsoft Office Excel 0 24.03.2011 19:51
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
меню в делфи с добавлением новой функции к уже существующей БД Ane4ka БД в Delphi 22 27.05.2008 15:40
Открытие(подключение) уже существующей базы данных MS Access через ADO Moel БД в Delphi 7 24.10.2007 16:57