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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 16:51   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию MS Server - внезапный взбрык автосчетчика

Добрый день!

У меня в тестовой таблице со студенческими декларациями первое поле Declaration_ID : автосчетчик (Identity). Заполнила 10 значений через Insert Into - все работало нормально и все добавилось, автосчетчик нормально оттикал. И вдруг ни с того, ни с сего - автосчетчик перестал увеличиваться, и не добавить ничего - ни Insert, ни вручную вбив в таблицу.

А ограничение на это поле Unique - просто криком кричит - мол, должны быть в поле уникальные значения и все. Можно конечно Unique отключить, но ведь до этого все нормально добавлялось, и проблема не в ограничении, а в автосчетчике.

А как "починить" счетчик? И с чем связаны подобные выкрутасы?
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 22.10.2011, 19:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это что-то из разряда мистичного. Покажите как вы создавали таблицу и автоинкриментное поле. Тип поля случайно не NUMERIC(1,0)?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.10.2011, 21:58   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И вдруг ни с того, ни с сего - автосчетчик перестал увеличиваться
У-у-у было у меня такое
Причина мегабанальна и мегатупая (по краймей мере с моей стороны была) - я разрешил пользуну вставлять в автоинкрементное поле значение. Т.Е. вернее разрешил пользователю выполнять INSERT в мою таблицу.
Незнакомый с структурой пользователь вписал в эту команду внос поля, которое у меня было автоинкрементным, и дело было в том что значение в это поле пользователем вносилось не по порядку а вразбор, лишь бы было уникальным.
После чего получился казус - при вносе новой записи, без указания автоинкрементного поля СУБД ругалось, что мол такое уже есть - и действительно такое уже было.
Посему пришлось запретить пользователям работать INSERTом, и написать свою хранимою процедуру вставки и контроля вставляемых данных.

Так что, блонди, проконтроллируй, может у тебя там в БД автоинкрементное поле случайно поимело значения не по порядку, где-то может дырка образовалась.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2011, 22:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Stilet, а каким образом можно INSERT-ом вставить в автоинкриментное поле, если не пользоваться SET IDENTITY_INSERT ... ON? Какие-то еще другие возможности в MSSQL есть?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.10.2011, 22:21   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SET IDENTITY_INSERT ... ON?
Хм... А вот это то я и не смотрел тогда...
Это ты верно подметил, видать лоханулся я где-то с этим параметром, или случайно выключил...
Впрочем в любом случае хранимая процедура вставки оказалась эффективнее, я не жалею.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 12:39   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Дорогой Аватар, я прошу прощения за молчание - просто реальная жезнь требует моего пермонентного присутствия в прямом эфире)))


Вот как создавалось поле:

Код:
CREATE TABLE Declaration
(declaration_ID INT IDENTITY (1,1) PRIMARY KEY NOT NULL, 
student_code CHAR(6)NOT NULL,
first_name VARCHAR (30) NOT NULL,
last_name VARCHAR (50) NOT NULL,
 и т.д. )
А данные я вносила через:

Код:
INSERT INTO Declaration
(student_code, first_name,  last_name)

VALUES 
('234567 ', 'Ivan', 'Petrov' ,   и т.д. )
То есть поле с счетчиком даже не затрагивалось никаким образом.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 23.10.2011 в 12:46.
Blondy вне форума Ответить с цитированием
Старый 23.10.2011, 13:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А данные я вносила через:
Ану открой менеджер, и посмотри что в таблице фактически. Нет ли чего необычного для этого поля? Триггеров не было?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 13:14   #8
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Сейчас гляну))
Куда мне до триггеров))) Мы такого пока не проходили)))))

Видим следующее:
1) То, что видим до добавления: первой строчки уже давно нет, она была тестовой, и после ее удаления все прекрасно добавлялось

2) Добавляем Insert-ом и слушаем, как среда ругается

3) Добавляем вручную и также слушаем ругань
Изображения
Тип файла: jpg MS1.JPG (27.4 Кб, 126 просмотров)
Тип файла: jpg MS2.JPG (37.4 Кб, 127 просмотров)
Тип файла: jpg MS5.JPG (62.7 Кб, 132 просмотров)
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Stilet; 23.10.2011 в 16:22.
Blondy вне форума Ответить с цитированием
Старый 23.10.2011, 16:23   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не... Где-то ты еще чегоенто крутанула лишнего...
Хорошо бы посмотреть полный скрипт базы, создания, обьявления, внесения и пр...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 21:07   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Blondy, если еще глючную таблицу не удалили (а скорее всего именно этим и закончится) интересно посмотреть, что вернет следующий запрос:
Код:
SELECT IDENT_CURRENT('Declaration') AS Current_Identity
Инструкцией DBCC CHECKIDENT ... в случае чего можно воспользоваться для установки нового текущего значения автоинкриментного поля
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.10.2011 в 21:36.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS SQL Server: назначение автосчетчика полю уже существующей таблицы Blondy SQL, базы данных 13 08.10.2011 23:33
GlassFish Server 3 Server cannot start. Port is occupied. NixonKNR Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 08.04.2011 01:10
Проблема с компом, внезапный переход в ждущий режим. VintProg Операционные системы общие вопросы 1 10.09.2010 12:00
[c++] Client-Server: GET request refused by the server Pumych Помощь студентам 2 22.08.2010 23:36
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15