Я использую VS 2010 Premium RTMRel (10.0.30319.1) и SS2008. У меня есть база данных, которая создает AOK, и имеет сценарий после развертывания, который загружает некоторые образцы данных. Когда я создаю и развертываю эту БД через пользовательский интерфейс VS, она работает нормально. Когда я пытаюсь развернуть его через vsdbcmd, происходит сбой при заполнении данных с такими ошибками:
** * SQL01268 C:\source\mydatabase.sql (5197,0) Поставщик данных .Net SqlClient: сообщение 2627, уровень 14, состояние 1, строка 227, нарушение ограничения PRIMARY KEY "pk_customers". Невозможно вставить повторяющийся ключ в объект "dbo.customers".**
В демонстрационных целях я пытаюсь заполнить определенную запись в таблице клиентов и переопределяю свойство IDENTITY столбца id, чтобы установить значение по своему выбору. Соответствующие строки в моем сценарии после развертывания:
SET IDENTITY_INSERT [dbo].[customers] ON
INSERT INTO [dbo].[customers] ([id], [name], [notes]) VALUES ( 10001, N'ABC Co', NULL )
SET IDENTITY_INSERT [dbo].[customers] OFF
Кто-нибудь знает, почему я могу переопределить столбец IDENTITY (используя SET IDENTITY INSERT ON) через пользовательский интерфейс, но не через командную строку?
И нет, нет никакой возможности, что в таблице customers уже есть запись с id=10001. Других записей (или вставок) в таблице вообще нет.
Я считаю, что часть сообщения об ошибке «повторяющийся ключ в объекте» совершенно неверна и что она возражает против того, чтобы я пытался поместить свое собственное значение в столбец PK.
Ограничение PK имеет стандартные значения по умолчанию. Если я изменю значения по умолчанию и установлю IGNORE_DUP_KEY = ON, то развертывание из командной строки будет работать. Но я не хочу этого делать.
Любые идеи или предложения приветствуются.