Нарушение ограничения PRIMARY KEY при обновлении приложения уровня данных

Я пытаюсь стандартизировать схему моей базы данных, используя приложение уровня данных.

Для этого у меня есть приложение уровня данных, которое я хочу применить к своей базе данных.

При попытке обновить приложение уровня данных я получаю следующее сообщение об ошибке:

Error SQL72014: .Net SqlClient Data Provider: Msg 2627, Level 14, State 1, Line 19 Violation of PRIMARY KEY constraint 'tmp_ms_xx_constraint_PK_ResidencyAgent'. Cannot insert duplicate key in object 'dbo.tmp_ms_xx_ResidencyAgent'. The duplicate key value is (1).
Error SQL72045: Script execution error.  The executed script:
BEGIN TRANSACTION;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET XACT_ABORT ON;

CREATE TABLE [dbo].[tmp_ms_xx_ResidencyAgent] (
    [ResidenceID] INT      NOT NULL,
    [AgentID]     INT      NOT NULL,
    [CreateDate]  DATETIME NOT NULL,
    [IsDefault]   BIT      NULL,
    CONSTRAINT [tmp_ms_xx_constraint_PK_ResidencyAgent] PRIMARY KEY CLUSTERED ([AgentID] ASC)
);

IF EXISTS (SELECT TOP 1 1 FROM   [dbo].[ResidencyAgent])
    BEGIN

        INSERT INTO [dbo].[tmp_ms_xx_ResidencyAgent] ([AgentID], [ResidenceID], [IsDefault], [CreateDate])
        SELECT   [AgentID],
                 [ResidenceID],
                 [IsDefault],
                 [CreateDate]
        FROM     [dbo].[ResidencyAgent]
        ORDER BY [AgentID] ASC;

    END

DROP TABLE [dbo].[ResidencyAgent];

EXECUTE sp_rename N'[dbo].[tmp_ms_xx_ResidencyAgent]', N'ResidencyAgent';

EXECUTE sp_rename N'[dbo].[tmp_ms_xx_constraint_PK_ResidencyAgent]', N'PK_ResidencyAgent'

Я попытался выполнить этот запрос к базе данных, и сообщение об ошибке

Msg 2627, Level 14, State 1, Line 19
Violation of PRIMARY KEY constraint 'tmp_ms_xx_constraint_PK_ResidencyAgent'. Cannot insert duplicate key in object 'dbo.tmp_ms_xx_ResidencyAgent'. The duplicate key value is (1).

Данные, которые в данный момент находятся в таблице [dbo].[ResidencyAgent]:

+-----------+-------------+-----------+-------------------------+
| AgentID   | ResidenceID | IsDefault | CreateDate              |
+-----------+-------------+-----------+-------------------------+
| 1         | 1           | 1         | 2011-10-06 13:28:42.110 |
| 1         | 2           | 0         | 2011-10-06 13:28:43.483 |
| 1         | 28          | 0         | 2017-09-01 14:53:08.750 |
| 6         | 1           | 1         | 2016-02-10 14:21:57.150 |
| 14        | 1           | 1         | 2017-08-07 16:37:13.020 |
+-----------+-------------+-----------+-------------------------+

Причина, по которой у приложения уровня данных есть проблема с выполнением сценария, заключается в том, что таблица содержит составной ключ, и поэтому создаваемая временная таблица должна быть определена следующим образом:

CREATE TABLE [dbo].[tmp_ms_xx_ResidencyAgent](
    [ResidenceID] [int] NOT NULL,
    [AgentID] [int] NOT NULL,
    [IsDefault] [bit] NULL,
    [CreateDate] [datetime] NOT NULL,
 CONSTRAINT [tmp_ms_xx_PK_ResidencyAgent] PRIMARY KEY CLUSTERED 
(
    [ResidenceID] ASC,
    [AgentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Кто-нибудь еще сталкивался с чем-то подобным? Если так, как они решили это?

Есть ли способ, которым я могу сделать так, чтобы приложение уровня данных "знало" об этом - есть ли опция, которую я могу установить? Могу ли я отредактировать dacpac, который я использую для обновления приложения уровня данных, чтобы обойти эту проблему?

Спасибо,

Шон

0 ответов

Другие вопросы по тегам