1
当INSERT语句尝试向空表中添加新记录时(属性)(没有记录),我的INSERT语句失败。 我惊讶于系统引发的错误:在空表上抛出UNIQUE约束异常INSERT [sql-server]
违反UNIQUE KEY约束'CK_Attribute_Name_IDproject'。不能在对象'dbo.Attribute'中插入重复键。重复的键值是(dummy,55)。
此表的创建脚本看起来像
CREATE TABLE [dbo].[Attribute](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDproject] [int] NOT NULL,
[IDtype] [int] NOT NULL,
[IDgroup] [int] NOT NULL,
[name] [varchar](50) NOT NULL,
[color] [int] NULL,
[protected] [tinyint] NULL,
[datemodified] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [CK_Attribute_Name_IDproject] UNIQUE NONCLUSTERED
(
[name] ASC,
[IDproject] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我skiped外键引用和默认值,这似乎并没有在这方面的兴趣。 UNIQUE约束适用于[name]和[IDproject]。
当运行下面的语句
SELECT *
FROM [dbo].[Attribute]
GO
SELECT *
FROM [dbo].[Project]
GO
我得到(受影响的2行(S))的结果
(影响0行(S))
的第一个结果表示属性表为空 第二秒表示有2 项目小号
然后运行下面的INSERT表属性它与上面提到的唯一约束错误
INSERT INTO [dbo].[Attribute] ([IDproject], [name], [IDtype], [IDgroup], [color], [protected], [datemodified])
SELECT DISTINCT
p.[ID],'dummy',t.[ID],g.[ID],-1,0,getdate()
FROM [dbo].[Project] p
INNER JOIN [dbo].[Group] g ON g.[name]='none' AND g.[IDproject] = p.[ID]
INNER JOIN [dbo].[AttributeType] t ON t.[format]='text' AND g.[IDproject] = p.[ID]
WHERE p.[name]='TESTPROJ'
GO
我怎样才能在空表上这样的错误而失败?
唯一的方法是您正在使用的查询生成重复键,在这种情况下,所有行上的名称都设置为'dummy',因此如果相同的p.ID位于多个行上,则会导致重复的键错误 – MWillemse
你的表**“属性”**与**项目**表有外键关系。所以如果你尝试在Attribute表中插入任何值,它应该在** Project **表中。在你的情况下,好像你插入**项目表中不存在的** IDproject **值。因此,请确保IDproject值是Project表中存在的值。让我知道如果你想进一步澄清 –
好吧,我明白了。派生的SELECT返回2个记录,其中'dummy'由于重复的INTO表中的一个,AttributeType,INNER JOIN被执行。 –