У меня есть таблица с первичным ключом, состоящей из 4-х колонок, как это:Нарушение ограничения первичного ключа при вставке
CREATE TABLE [dbo].[INV_STOCK_TEST]
(
[STOCK_WRH_ID] [varchar](6) NOT NULL,
[STOCK_LOC_ID] [varchar](6) NOT NULL,
[STOCK_ITEM_NO] [varchar](20) NOT NULL,
[STOCK_BEG_QTY] [decimal](9, 2) NULL,
[YEAR] [nvarchar](5) NOT NULL,
CONSTRAINT [PK__INV_STOC__3B64B7082B9540B9]
PRIMARY KEY CLUSTERED (
[STOCK_WRH_ID] ASC,
[STOCK_LOC_ID] ASC,
[STOCK_ITEM_NO] ASC,
[YEAR] ASC
)WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
И у меня есть процедура, чтобы ежегодно обновлять данные в этой таблице
DECLARE @YEAR nvarchar(20)
SET @YEAR = (SELECT TOP 1 [YEAR] FROM INV_STOCK_TEST ORDER BY [YEAR] DESC)
INSERT INTO INV_STOCK_TEST([STOCK_WRH_ID], [YEAR],
[STOCK_LOC_ID], [STOCK_BEG_QTY], [STOCK_ITEM_NO])
SELECT
STOCK_WRH_ID, @YEAR + 1,
STOCK_LOC_ID, 0, STOCK_ITEM_NO
FROM
INV_STOCK_TEST
Примеры вставлено данных
A A ITEM_A 0.00 2014
A A ITEM_A 0.00 2015
B B ITEM_B 0.00 2014
B B ITEM_B 0.00 2015
Это нормально, когда 2014 год до 2015 года, но когда 2015 до 2016 года, и я бегу в пр ocedure, я получаю эту ошибку:
Violation of PRIMARY KEY constraint 'PK__INV_STOC__3B64B7082B9540B9'. Cannot insert duplicate key in object 'dbo.INV_STOCK_TEST'. The duplicate key value is (A, A, ITEM_A, 2017).
Я не могу изменить первичный ключ, как это исправить?
Первичные ключи не могут иметь повторяющиеся данные. вам может потребоваться перепроектировать таблицу, если вы хотите, чтобы эти значения были вставлены. Используйте этот код, чтобы удалить первичный ключ «ALTER TABLE INV_STOCK_TEST DROP CONSTRAINT PK__INV_STOC__3B64B7082B9540B9» – Dalton
Мне нужно сохранить данные не дублирующимися, я вставляю данные с тремя одинаковыми первичными данными и 1 первичными данными различны (YEAR) – Mike