Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
Не могу установить через GUI SSMS - когда добавляю ключ (в таблице уже есть один первичный ключ, но ни одного уникального), то из списка стобцов доступен только стобец-первичный ключ и опция <None>. Думал, это из-за данных в таблице - стёр всё и всё равно не работает. И так со всеми таблицами.

Как добавить через ГУИ? На худой конец, с помощью скрипта в редакторе запросов?
26 авг 11, 10:31    [11182932]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
select @@version что вернет?
26 авг 11, 10:33    [11182955]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user7320
На худой конец, с помощью скрипта в редакторе запросов?
Худой конец - это как раз=таки Ваш любимый GUI!
Так дети в детском саду в кубики играют. Очень похоже.
Смотрите в BOL
ALTER TABLE <TableName> ADD CONSTRAINT <ConstraintName> UNIQUE(<FieldList>);
26 авг 11, 10:45    [11183059]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
tpg
select @@version что вернет?

Вернёт данные о сервере. А зачем это? Я таблицу на этом же сервере созда, день-два назад.
iap
Смотрите в BOL

Куда?


Вобщем, сам нашёл ответ - тип данных был неподходящий для уникального ключа. У меня был nvarchar(MAX), а надо не MAX, а какое-нибудь покороче число. С полтинником получилось.

Скрипты использовать хорошо, потому что ошибку пожет подсказать, а ГУИ чего-то молчит - попробуй догадайся, чего ему не нравится.
26 авг 11, 13:54    [11185028]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
Glory
Member

Откуда:
Сообщений: 104751
user7320
Вернёт данные о сервере. А зачем это? Я таблицу на этом же сервере созда, день-два назад.

Потому что версий сервера много разных. И в каждой могут быть свои баги

user7320
ГУИ чего-то молчит - попробуй догадайся, чего ему не нравится.

Так ГУИ сразу отфильтровал запрещенные типы данных
26 авг 11, 13:58    [11185078]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iljy
Member

Откуда:
Сообщений: 8711
user7320
tpg
select @@version что вернет?

Вернёт данные о сервере. А зачем это? Я таблицу на этом же сервере созда, день-два назад.

Затем, что разные сервера ведут себя по разному.
user7320
iap
Смотрите в BOL

Куда?

Тогда хотябы в ФАК.

user7320
Вобщем, сам нашёл ответ - тип данных был неподходящий для уникального ключа. У меня был nvarchar(MAX), а надо не MAX, а какое-нибудь покороче число. С полтинником получилось.

Скрипты использовать хорошо, потому что ошибку пожет подсказать, а ГУИ чего-то молчит - попробуй догадайся, чего ему не нравится.

Вот че-то вы врете. У меня гуй даже выбрать поле VARCHAR(MAX) для ключа не дает, только что проверил. А ошибки он выдает те же самые, потому что выполняет те же самые скрипты.
26 авг 11, 14:01    [11185112]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
iljy
user7320
Вобщем, сам нашёл ответ - тип данных был неподходящий для уникального ключа. У меня был nvarchar(MAX), а надо не MAX, а какое-нибудь покороче число. С полтинником получилось.

Скрипты использовать хорошо, потому что ошибку пожет подсказать, а ГУИ чего-то молчит - попробуй догадайся, чего ему не нравится.

Вот че-то вы врете. У меня гуй даже выбрать поле VARCHAR(MAX) для ключа не дает, только что проверил. А ошибки он выдает те же самые, потому что выполняет те же самые скрипты.

Так я сначала указал тип данных столбца, а через пару дней захотел его уникальным сделать. Вот тогда ГУИ ничего не пишет - просто не кажет в списке этот столбец и всё. У меня, кстати, все нварчаровские столбцы были с МАХ - я думал, что размер у них всё равно не больше действительного размера данных (это так и есть) и выбирал МАХ всегда, т. к. это удобнее, чем высчитывать, сколько там отвести на то-то и то-то. А оказалось, что с таким подходом уникальные ключи не определяются.
26 авг 11, 14:49    [11185521]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
Glory
Member

Откуда:
Сообщений: 104751
user7320
я думал, что размер у них всё равно не больше действительного размера данных (это так и есть) и выбирал МАХ всегда

Лучше всего читать документацию. Тогда не придется додумывать
26 авг 11, 14:51    [11185543]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user7320
А оказалось, что с таким подходом уникальные ключи не определяются.
И не только. Индексы тоже.
26 авг 11, 14:53    [11185559]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
iljy
user7320
Куда?

Тогда хотябы в ФАК.

(лирика) Ну так это, я смотрю по мере возможностей. Только если увлекаться чтением руководств, могут с работы попереть. Начальству-то не чтение ФАКов нужно, а результат на-гора. И им плевать, что ты не крутой спец по этому серверу и в институте его не изучал. А за несколько месяцев освоить десяток технологий и фреймворков, да ещё на приемлемом уровне, да ещё выдав рабочий результат в виде коммерческого продукта... Поэтому что-то сам изучаешь, а что-то готовое просишь, чтобы люди знающие поделились.

)
26 авг 11, 14:57    [11185603]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
Glory
Member

Откуда:
Сообщений: 104751
user7320
Только если увлекаться чтением руководств, могут с работы попереть

В мемориз
Лучше не читать ничего, а самому придумать все - и типы и синтаксис
26 авг 11, 14:59    [11185624]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
Glory
user7320
я думал, что размер у них всё равно не больше действительного размера данных (это так и есть) и выбирал МАХ всегда

Лучше всего читать документацию. Тогда не придется додумывать

Ну так так и есть, кроме несущественных двух байтов.

Или объясните мне тогда, пожалуйста, в чём разница между nvarchar(100) и nvarchar(MAX), если в обоих случаях записывается строка в 100 символов? По-моему, во втором случае фактический размер будет 100 символов плюс 2 байта. А?
26 авг 11, 15:00    [11185639]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
Glory
user7320
Только если увлекаться чтением руководств, могут с работы попереть

В мемориз
Лучше не читать ничего, а самому придумать все - и типы и синтаксис

Это реальность. Чего вы смеётесь? Всем на всех срать, поэтому каждый выкручивается как может.

Конечно, лучше долго и упорно читать руководства, а потом делать. Только потом это уже никому не надо будет.

Факт: время на полное изучение руководств всех используемых продуктов превышает время эффективного использования этих продуктов за их время жизни. Ну т. е. вы что-то изучили, а это уже устарело. А кто и когда работать-то будет, а?
26 авг 11, 15:04    [11185680]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
Glory
Member

Откуда:
Сообщений: 104751
user7320
Или объясните мне тогда, пожалуйста, в чём разница между nvarchar(100) и nvarchar(MAX), если в обоих случаях записывается строка в 100 символов?

Для этого производители и составляют документацию.
26 авг 11, 15:05    [11185687]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
Glory
Member

Откуда:
Сообщений: 104751
user7320
Факт: время на полное изучение руководств всех используемых продуктов превышает время эффективного использования этих продуктов за их время жизни. Ну т. е. вы что-то изучили, а это уже устарело. А кто и когда работать-то будет, а

Вы 3 часа не могли построить нужный индекс
Вы себе эти 3 часа поставили в работу ?
26 авг 11, 15:06    [11185696]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
Glory
user7320
Факт: время на полное изучение руководств всех используемых продуктов превышает время эффективного использования этих продуктов за их время жизни. Ну т. е. вы что-то изучили, а это уже устарело. А кто и когда работать-то будет, а

Вы 3 часа не могли построить нужный индекс
Вы себе эти 3 часа поставили в работу ?

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

Только вы не обижайтесь. )
26 авг 11, 15:12    [11185750]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user7320
Или объясните мне тогда, пожалуйста, в чём разница между nvarchar(100) и nvarchar(MAX), если в обоих случаях записывается строка в 100 символов? По-моему, во втором случае фактический размер будет 100 символов плюс 2 байта. А?
Я балдею! Как может программист такое спрашивать?
В первом случае есть гарантия, что длина строки НИКОГДА не превысит 100 символов.
И, следовательно, строка никогда не превысит 900 байт, которые разрешает индекс.
А во втором сервер должен как-то догадаться об этом и позволить создать индекс
для любых возможных данных в этом поле в будущем, да?
26 авг 11, 15:19    [11185805]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
iap
user7320
Или объясните мне тогда, пожалуйста, в чём разница между nvarchar(100) и nvarchar(MAX), если в обоих случаях записывается строка в 100 символов? По-моему, во втором случае фактический размер будет 100 символов плюс 2 байта. А?
Я балдею! Как может программист такое спрашивать?
В первом случае есть гарантия, что длина строки НИКОГДА не превысит 100 символов.
И, следовательно, строка никогда не превысит 900 байт, которые разрешает индекс.
А во втором сервер должен как-то догадаться об этом и позволить создать индекс
для любых возможных данных в этом поле в будущем, да?

Я вас не совсем понял насчёт "сервер как-то должен догадаться об этом". Ему не надо догадываться - я ему и так сказал, чтобы он сделал мне этот столбец уникальным ключом.

Исходя из этого - http://msdn.microsoft.com/en-us/library/ms186939.aspx - мои рассуждения о строке в 100 символов верны. А вот почему сервер не хочет создавать индекс с параметром МАХ? Я могу только тем это объяснить, что проверять уникальность для данных длиной 2^31 байт накладно, мягко говоря, а для n = 1...4000 - вполне возможно.
26 авг 11, 15:54    [11186214]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user7320,

это СЕЙЧАС Вы поместили в поле NVARCHAR(MAX) 100 символов.
А завтра можете запихнуть туда миллиард!

Сервер должен сделать индекс для обслуживания ВСЕХ ВОЗМОЖНЫХ ДАННЫХ, которые МОГУТ попасть в поле.
Это ясно?
Но для индекса длина поля не может превышать 900 байт (450 символов в данном случае)

Задавая тип NVARCHAR(100), Вы гарантируете, что больше 200 байт в поле никогда не будет.
26 авг 11, 16:03    [11186349]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
user7320
Member

Откуда:
Сообщений: 3543
iap
user7320,

это СЕЙЧАС Вы поместили в поле NVARCHAR(MAX) 100 символов.
А завтра можете запихнуть туда миллиард!

Сервер должен сделать индекс для обслуживания ВСЕХ ВОЗМОЖНЫХ ДАННЫХ, которые МОГУТ попасть в поле.
Это ясно?
Но для индекса длина поля не может превышать 900 байт (450 символов в данном случае)

Задавая тип NVARCHAR(100), Вы гарантируете, что больше 200 байт в поле никогда не будет.

А, нашёл - http://msdn.microsoft.com/en-us/library/ms191241.aspx . Только что, уникальные ключи это тоже индексы, даже если они не инкрементируются при каждой вставке и не вычисляются по типа GUID? Я думал, сервер обеспечивает уникальность, делая при каждой вставке выборку из уже введённых значений - а нет ли среди них тех, которые пользователь пытается вставтиь?
26 авг 11, 16:22    [11186617]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
iljy
Member

Откуда:
Сообщений: 8711
user7320
А, нашёл - http://msdn.microsoft.com/en-us/library/ms191241.aspx . Только что, уникальные ключи это тоже индексы, даже если они не инкрементируются при каждой вставке и не вычисляются по типа GUID? Я думал, сервер обеспечивает уникальность, делая при каждой вставке выборку из уже введённых значений - а нет ли среди них тех, которые пользователь пытается вставтиь?

Вот это точно надо на стену вешать... Вы во всех используемых системах ТАК разбираетесь?
Реляционные СУБД существуют 40 лет, и уж изучить хотя бы основные принципы за это время точно можно.
26 авг 11, 17:08    [11187153]     Ответить | Цитировать Сообщить модератору
 Re: Не могу установить unique key для уже созданной таблицы - не выводит столбцы для выбора  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
user7320
Только что, уникальные ключи это тоже индексы


Прикиньте, сколько интересного из доков узнать можно? Только это - вы не сильно на эту фигню отвлекайтесь, вы результат, результат давайте. А то индексы-шминдексы... Начальство это не интересует.
26 авг 11, 17:21    [11187258]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить