У меня странная проблема, и мне нужна помощь, чтобы разобраться.
У меня есть база данных, в которой есть столбец идентификатора (определяемый как int, а не null, Identity, начинается с 1, увеличивается на 1) в дополнение ко всем столбцам данных приложения. Первичным ключом таблицы является столбец идентификатора, остальные компоненты отсутствуют.
Нет набора данных, который я мог бы использовать в качестве «естественного первичного ключа», поскольку приложение должно разрешать множественное представление одних и тех же данных.
У меня есть хранимая процедура, которая является единственным способом добавления новых записей в таблицу (кроме входа на сервер напрямую от имени владельца базы данных)
Пока QA тестировало приложение этим утром, они вводили новую запись в базу данных (используя приложение так, как оно было задумано, и как они делали в течение последних двух недель) и столкнулись с нарушением первичного ключа в этом таблица.
Это то же самое, что я делал первичные ключи уже около 10 лет, и никогда не сталкивался с этим.
Есть идеи, как это исправить? Или это один из тех глюков космических лучей, которые появляются время от времени.
Спасибо за любой совет, который вы можете дать.
Nigel
Отредактировано в 13:15 ПО ВОСТОЧНОМУ ВРЕМЕНИ 12 июня, чтобы дать больше информации
Упрощенная версия схемы ...
CREATE TABLE [dbo].[tbl_Queries](
[QueryID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[Address] [varchar](150) NOT NULL,
[Apt#] [varchar](10) NOT NULL
... <12 other columns deleted for brevity>
[VersionCode] [timestamp] NOT NULL,
CONSTRAINT [PK_tbl_Queries] PRIMARY KEY CLUSTERED
(
[QueryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
(также удалены операторы значений по умолчанию)
Хранимая процедура выглядит следующим образом
insert into dbo.tbl_Queries
( FirstName,
LastName,
[Address],
[Apt#]...) values
( @firstName,
@lastName,
@address,
isnull(@apt, ''), ... )
Он даже не смотрит на столбец идентификаторов, не использует IDENTITY, @@ scope_identity или что-то подобное, это просто файл и забудьте.
Я настолько уверен, насколько могу, что значение идентификатора не было сброшено, и никто больше не использует прямой доступ к базе данных для ввода значений. Единственный раз в этом проекте, когда используется идентификационная вставка, - это первоначальное развертывание базы данных для настройки определенных значений в таблицах поиска.
Команда QA повторила попытку сразу после получения ошибки, и ей удалось успешно отправить запрос, и с тех пор они пытались воспроизвести его, но пока не удалось.
Я действительно ценю идеи людей.