【发布时间】:2015-12-10 04:55:18
【问题描述】:
我有一个表,其主键由 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 年运行程序时,我收到此错误:
违反主键约束“PK__INV_STOC__3B64B7082B9540B9”。 无法在对象“dbo.INV_STOCK_TEST”中插入重复键。这 重复键值为 (A, A, ITEM_A, 2017)。
我无法更改主键,如何解决这个问题?
【问题讨论】:
-
主键不能有重复数据。如果你想插入这样的值,你可能需要重新设计表格。使用此代码删除主键“ALTER TABLE INV_STOCK_TEST DROP CONSTRAINT PK__INV_STOC__3B64B7082B9540B9”
-
我需要保持数据不重复,我插入了 3 个相同的主数据和 1 个不同的主数据(年份)
标签: sql-server stored-procedures