Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Нужна помощь.
Данные удобнее писать в Экселе и экспортировать их в SQL. Вот только после экспорта необходимо добавить поле с первичным ключом, что бы нумерация начиналась с 1.
Подскажите пож., каким скриптом это можно сделать??
6 июл 16, 16:46    [19376597]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
создайте заранее нужную вам таблицу с PK identity(1,1) и заливайте туда даные в остальные колонки
6 июл 16, 16:51    [19376643]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
А можно по подробнее?
Я пытался заливать с созданным полем "id", но не получается.
Работаю через DBForge
6 июл 16, 16:57    [19376682]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
Nightingale
каким скриптом это можно сделать??
create table dbo.t (a int);
insert into dbo.t select top (10) object_id from sys.objects;
go

alter table dbo.t add id int not null identity;
alter table dbo.t add constraint PK_t primary key (id);
go

select * from dbo.t;
go

drop table dbo.t;
go
6 июл 16, 16:59    [19376702]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Ничего не понял из того что написано
Ну всё равно спасибо.

Буду искать дальше
6 июл 16, 17:18    [19376835]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
Nightingale
Работаю через DBForge

работайте через SSMS и не будет непонимания
6 июл 16, 17:19    [19376842]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Спасибо.
Да, некоторые вещи делаю в SSMS. Но в DBForge работать с базой гораздо удобнее )))
6 июл 16, 17:29    [19376916]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Nightingale
Спасибо.
Да, некоторые вещи делаю в SSMS. Но в DBForge работать с базой гораздо удобнее )))

и приятный бонус в виде

автор
Ничего не понял из того что написано
Ну всё равно спасибо.
6 июл 16, 17:33    [19376932]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Можно объяснить "на пальцах", что надо сделать, что бы не было такой ошибки, при назначении Первичного ключа на только что созданное поле ?


Ошибка:
___________________________
таблица "########"
- Не удалось изменить таблицу.
Не удалось вставить значение NULL в столбец "id", таблицы "Термины и Определения.dbo.Tmp_######"; в столбце запрещены значения NULL. Ошибка в INSERT.
Выполнение данной инструкции было прервано.
__________________________
6 июл 16, 18:04    [19377136]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Nightingale,

пронумеруйте в екселе и заливайте.
6 июл 16, 18:42    [19377318]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
o-o
Guest
Nightingale,
Вы бы хоть определения терминов прочли, чтобы понимать самому, чего вы хотите.
Ну как primary key может содержать null?
Может, вам и вообще не надо никакого ключа, может, вы хотите нумерацию и все, где есть, хорошо, где нет, тоже неплохо.
Ключ это уникальные значения, как это согласуется с null?
Ну и про null почитайте, может, вы и это не понимаете, что это такое.
Кстати, если вы ключ хотите завести только потому, что где-то слышали, что так надо, то попытайтесь хотя бы понять, зачем надо. Ключ обеспечивает уникальность строк. А что вы собираетесь в таблицу импортировать может содержать дубли. И хоть вы добавите туда нумерацию, хоть нет, дубли из данных не уйдут, просто это будут пронумерованные дубли.
Или если вы надеетесь, что номера получатся в порядке вставки, такого тоже вы не обеспечите никак.
Короче, самая здравая мысль, мне кажется, у Колосова прозвучала: нумеруйте в экселе и это все заливайте
6 июл 16, 19:45    [19377555]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Да. Всё верно.
Первичный ключ РАЗУМЕЕТСЯ не может содержать значение NULL.
Я это понимаю.
Но когда я отключаю содержание пустых значений в первичном ключе, то при сохранении таблицы всё равно УПОРНО вылезает ошибка (в SSMS).
Кстати, я пытался импортировать таблицу с уже заведенным полем под первичный ключ. Однако ничего из этого не получалось.
Я работаю с базой через программу DBForge. Она намного удобнее, что SSMS, но и в ней есть глюки, из-за которых, я собственно и не могу импортировать таблицу с PK.
А через SSMS импортировать вообще не получается. Ругается на остутствие библиотек OLE.
Завтра утром надеюсь разобраться с этим.

Я пока ещё новичок, поэтому не судите строго ПЛИИИИЗ ))))
6 июл 16, 22:07    [19378025]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Nightingale
Но когда я отключаю содержание пустых значений в первичном ключе
Чего? Как это будет по русски? :-)

Nightingale
то при сохранении таблицы всё равно УПОРНО вылезает ошибка (в SSMS).
Чего? Что такое "сохранение таблицы"?

Nightingale
Кстати, я пытался импортировать таблицу с уже заведенным полем под первичный ключ. Однако ничего из этого не получалось.
Я работаю с базой через программу DBForge. Она намного удобнее, что SSMS, но и в ней есть глюки, из-за которых, я собственно и не могу импортировать таблицу с PK.
А через SSMS импортировать вообще не получается. Ругается на остутствие библиотек OLE.
Вместо всего этого ада нужно выполнить две (!) строки на SQL. Можно даже одну (!!!) строку. 19376702
alter table dbo.t add id int not null identity constraint PK_t primary key (id);
6 июл 16, 22:57    [19378254]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Вот когда я убираю галочку с "Разрешить значения NULL" и сохраняю таблицу - появляется следующая ошибка:


таблица "213"
- Не удалось изменить таблицу.
Инструкция ALTER TABLE допускает добавление только тех столбцов, которые могут содержать значения NULL, имеют указанное определение DEFAULT, являются столбцами идентификаторов или метки времени; если ни одно из вышеперечисленных условий не выполнено, для добавления такого столбца таблица должна быть пустой. Не удалось добавить столбец "id" в непустую таблицу "213", так как она не соответствует этим условиям.

Я не изучал язык T-SQL.

"alter table dbo.t add id int not null identity constraint PK_t primary key (id);"

Пардон. А где здесь прописывается имя таблицы ?
dbo.t ????
Пробовал по Вашему совету делать такой запрос:
alter table dbo.213 add id int not null identity constraint PK_dbo.213 primary key (id);

Сообщение такое:
Сообщение 28102, уровень 16, состояние 1, строка 2
Пакетное выполнение прервано вследствие запроса отладчика.
7 июл 16, 11:41    [19379773]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Nightingale
Я не изучал язык T-SQL.

"alter table dbo.t add id int not null identity constraint PK_t primary key (id);"

Пардон. А где здесь прописывается имя таблицы ?
dbo.t ????
Ну, изучайте, раз приходится работать с MSSQL
Сначала нужно изучить T-SQL; при возникновении каких то потребностей сначала узнать, какими командами это можно сделать, ну а потом можно опционально попробовать сделать то же самое в интерфейсе.

Да, имя таблицы - это dbo.t. Подставьте свою таблицу.

Nightingale
Пробовал по Вашему совету делать такой запрос:
alter table dbo.213 add id int not null identity constraint PK_dbo.213 primary key (id);

Сообщение такое:
Сообщение 28102, уровень 16, состояние 1, строка 2
Пакетное выполнение прервано вследствие запроса отладчика.
А вы не запускайте под дебаггером.
Нужно просто выполнить команду, зачем вам отладчик???
7 июл 16, 11:50    [19379825]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Nightingale
Вот когда я убираю галочку с "Разрешить значения NULL" и сохраняю таблицу - появляется следующая ошибка:


таблица "213"
- Не удалось изменить таблицу.
Инструкция ALTER TABLE допускает добавление только тех столбцов, которые могут содержать значения NULL, имеют указанное определение DEFAULT, являются столбцами идентификаторов или метки времени; если ни одно из вышеперечисленных условий не выполнено, для добавления такого столбца таблица должна быть пустой. Не удалось добавить столбец "id" в непустую таблицу "213", так как она не соответствует этим условиям.
Ну так в сообщении всё сказано - вы не назначили значение по умолчанию, и не назначили IDENTITY.

В данном случае нужно назначить столбцу свойство IDENTITY. Не знаю, как это делается в ваших сложных визуальных программах, я такие эксперименты никогда не ставил - сломает базу, уволят меня за такое :-)
7 июл 16, 11:54    [19379860]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
alexeyvg
А вы не запускайте под дебаггером.
Нужно просто выполнить команду, зачем вам отладчик???
Видно, он нажимает не на ту кнопку в SQL Management Studio.
Лучше нажимать просто F5
7 июл 16, 11:57    [19379883]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
alexeyvg
Nightingale
Вот когда я убираю галочку с "Разрешить значения NULL" и сохраняю таблицу - появляется следующая ошибка:


таблица "213"
- Не удалось изменить таблицу.
Инструкция ALTER TABLE допускает добавление только тех столбцов, которые могут содержать значения NULL, имеют указанное определение DEFAULT, являются столбцами идентификаторов или метки времени; если ни одно из вышеперечисленных условий не выполнено, для добавления такого столбца таблица должна быть пустой. Не удалось добавить столбец "id" в непустую таблицу "213", так как она не соответствует этим условиям.
Ну так в сообщении всё сказано - вы не назначили значение по умолчанию, и не назначили IDENTITY.

В данном случае нужно назначить столбцу свойство IDENTITY. Не знаю, как это делается в ваших сложных визуальных программах, я такие эксперименты никогда не ставил - сломает базу, уволят меня за такое :-)
Он же вроде показал команду:
alter table dbo.t add id int not null identity constraint PK_t primary key (id);
Там задаётся IDENTITY.
7 июл 16, 11:59    [19379898]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
o-o
Guest
вы от него словами ничего не добьетесь,
термины изучать не хочет, а своими словами полная ахинея.

Nightingale,
если хотите, чтоб вас понимали, или придется слова подучивать,
или картинками показывайте, что делаете и какая ошибка
7 июл 16, 12:30    [19380074]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
o-o,

Ай-яй-яй.
Как не красиво .....
7 июл 16, 12:46    [19380208]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Nightingale,

вы предлагаете всем поставить хрень ака DBForge и записать вам видео как добавить ваш ключ? как сделать стандартными средствами tsql вам написали
7 июл 16, 12:52    [19380270]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Nightingale
Member

Откуда:
Сообщений: 48
Всё.
Получилось.
alter table dbo.ИМЯ_ТАБЛИЦЫ add id int not null identity constraint PK_ИМЯ_ТАБЛИЦЫ primary key (id);

Очень жаль, что визуальные средства не позволяют делать того, что позволяют делать коддинг.
7 июл 16, 14:07    [19380858]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
o-o
Guest
Nightingale
Очень жаль, что визуальные средства не позволяют делать того, что позволяют делать коддинг.

Ай-ай-ай, как некрасиво.
Возводить поклеп на визуальные средства.
Management Studio, Object Explorer, пкм на таблице, Design.
Кликнуть нижнюю строку, внести ColumnName, DataType. В Column Properties выбрать identity specification, отметить is identity Yes.
ПКМ слева только что созданной колонки, set primary key.
Сохранить.
7 июл 16, 14:36    [19381095]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Nightingale,

автор
визуальные средства не позволяют делать того, что позволяют делать коддинг.


С чего бы они не позволяли? Разве что персонально по фамилии :)
7 июл 16, 15:29    [19381520]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Первичного ключа в существующую таблицу.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Nightingale
Очень жаль, что какие-то левые визуальные средства не позволяют делать того, что позволяют делать коддинг.
Поправил, не стоит благодарить.
7 июл 16, 15:31    [19381542]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить