У меня запуталась странная проблема, и мне нужна помощь, чтобы понять это.Нарушение основного ключа Sql Server 2005 в столбце Identity
У меня есть база данных, которая имеет столбец идентификатора (определенный как int не null, Identity, начинается с 1, увеличивается на 1) в дополнение ко всем столбцам данных приложения. Первичным ключом для таблицы является столбец идентификатора, никаких других компонентов.
Нет набора данных, которые я могу использовать в качестве «естественного первичного ключа», поскольку приложение должно допускать несколько представлений одних и тех же данных.
У меня есть хранимая процедура, которая является единственным способом для добавления новых записей в таблицу (кроме входа на сервер непосредственно в качестве владельца БД)
Хотя QA было тестирование приложения сегодня утром, они в введите новую запись в базу данных (используя приложение, как оно было предназначено, и как они это делали в течение последних двух недель), и столкнулись с нарушением первичного ключа в этой таблице.
Это то же самое, что я делал Первичные ключи уже около 10 лет и никогда не сталкивался с этим.
Любые идеи о том, как исправить это? Или это один из тех сбоев космических лучей, которые появляются один раз в течение долгого времени.
Спасибо за любой совет, который вы можете дать.
Найджел
Отредактировано на 1:15 PM EDT июня 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 снова попыталась сразу же после получения ошибки и смогла отправить запрос успешно, и с тех пор они пытались воспроизвести его и до сих пор не преуспели.
Я действительно ценю идеи людей.
Хммм ... есть ли шанс, что вы можете вставить схему очищенной таблицы и/или заявление о нарушении правил? – ristonj
Вы все еще не можете добавить новые записи, или это произошло только один раз? –
проверить мой ответ ниже Найджела ... – Eric