Я думаю, что у вас уже есть ответ, вы вставляете повторяющиеся значения в столбец, который вы указали в качестве первичного ключа, ошибка, которую вы получаете, говорит вам об этом, и все это особенно ясно. Я вижу, что вы предполагали, что происходило что-то более «зловещее», но, похоже, это было не так, и это не было «состояние расы» или что-то более сложное.
Однако, Я подумал, что, возможно, стоит указать на что-то, что я воспринимаю как «красный флаг». Может быть, это не классифицируется как ответ, но затрагивает некоторые моменты в вашем первоначальном вопросе, особенно когда вы начинаете спрашивать об опциях в «сложной» части вашего CREATE TABLE
сценария, и это слишком долго для комментария?
Если у вас есть «по умолчанию» из установки «1022 * Server», тогда 90% операторов в вашем скрипте CREATE TABLE
являются просто избыточными значениями по умолчанию.
Я могу запустить это script:
CREATE TABLE [dbo].[MyTable] (
[Columndata1] [nvarchar] (255) NOT NULL,
[Columndata2] [nvarchar] (max) NOT NULL,
[Columndata3] [nvarchar] (max) NOT NULL,
[ColumndataTime] [datetime] NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED ([Columndata1]));
Затем я могу сгенерировать скрипт создания для таблицы непосредственно из SSMS, чтобы получить:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MyTable](
[Columndata1] [nvarchar](255) NOT NULL,
[Columndata2] [nvarchar](max) NOT NULL,
[Columndata3] [nvarchar](max) NOT NULL,
[ColumndataTime] [datetime] NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Columndata1] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Этот второй скрипт очень похож на тот, что в вашем опубликовать сейчас, не так ли?
Теперь нет ничего плохого в том, чтобы указать все эти параметры по умолчанию, и есть случаи, когда это может закончиться вашим преимуществом, но моим личным предпочтением (и предпочтением всех, кого я когда-либо работал) опускает параметры по умолчанию, так как они просто усложняют рецензирование сценариев и, по сути, "беспорядочно". Вы можете спорить о том, стоит ли указывать ASC
в разделе PRIMARY KEY
или нет, некоторые из них предполагаемые знания, и всегда есть вероятность, что Microsoft может решить изменить значения по умолчанию в будущем (и тогда первый сценарий будет не генерировать то, что вы хотели). Однако, с прагматической точки зрения c о том, как эти вещи работают, шансы Microsoft изменить эти параметры в будущей версии невероятно малы, поскольку это сломало бы так много баз данных, которые используются в дикой природе.
Возьмите это как хотите, но я подумал, что стоит объяснить это, поскольку вы, кажется, немного зациклены (может быть, неправильное слово :)) на «длинной части» (ваши слова) в исходном запросе?