Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server正在阻止数据库插入,因为存在唯一密钥Contstraint,但该密钥是唯一的_Sql_Sql Server - Fatal编程技术网

SQL Server正在阻止数据库插入,因为存在唯一密钥Contstraint,但该密钥是唯一的

SQL Server正在阻止数据库插入,因为存在唯一密钥Contstraint,但该密钥是唯一的,sql,sql-server,Sql,Sql Server,我对数据库表具有以下唯一键约束: ALTER TABLE [dbo].[Adviser] ADD CONSTRAINT [UQ__Adviser__C56B02E841AB1B87] UNIQUE NONCLUSTERED ([Code] ASC, [Name] ASC) 数据库中当前有一行代码为DUFFENDI且名称为Dizzee-Uffendi,我正在尝试添加一行代码为DUFFENDIBGL且名称为Dizzee-Uffendi,但出现错误: 无法在对象“dbo.advi

我对数据库表具有以下唯一键约束:

ALTER TABLE [dbo].[Adviser] 
    ADD CONSTRAINT [UQ__Adviser__C56B02E841AB1B87] 
    UNIQUE NONCLUSTERED ([Code] ASC, [Name] ASC)
数据库中当前有一行代码为
DUFFENDI
且名称为
Dizzee-Uffendi
,我正在尝试添加一行代码为
DUFFENDIBGL
且名称为
Dizzee-Uffendi
,但出现错误:

无法在对象“dbo.advisor”中插入重复键


有人能解释为什么键是唯一的时我会出现此错误吗?

如果我弄错了,请纠正我,但您得到的错误似乎是由表中已存在的重复数据引起的。
code
Name
列的数据类型和列宽是多少?插入行时是否收到任何数据截断警告?表上还有哪些其他唯一/主键约束和索引?完整的错误消息应告诉您违反的约束和违反的值,但您如何尝试插入这些值?例如,如果您是从变量中插入它们,那么代码变量是nvarchar(8)(还是小于8)?如果是这样,
DUFFENDI
将与
DUFFENDIBGL
相同,因为它将被修剪为8个(或更少)字符。注意:如果您是从变量中插入变量,并且没有为变量指定长度,那么它们将被修剪为单个字符。对,但是如何插入很重要。例如,如果你像
DECLARE@code-NVARCHAR(8)=N'DUFFENDIBGL',@name-NVARCHAR(255)=N'Dizzee-Uffendi'那样插入它们;插入dbo.advisor(代码,名称)选择@Code,@Name
您将收到一条错误消息,说明您违反了密钥,因为在本例中,
DUFFENDIBGL
将被修剪为
DUFFENDI
。也许其他的例子做得很好。例如,如果您执行了我在示例中编写的操作,但将其改为
NVARCHAR(255)
,而不是
NVARCHAR(8)
,则不会看到错误消息。如果我弄错了,请纠正我,但是您得到的错误似乎是由表中已存在的重复数据引起的。
code
Name
列的数据类型和列宽是多少?插入行时是否收到任何数据截断警告?表上还有哪些其他唯一/主键约束和索引?完整的错误消息应告诉您违反的约束和违反的值,但您如何尝试插入这些值?例如,如果您是从变量中插入它们,那么代码变量是nvarchar(8)(还是小于8)?如果是这样,
DUFFENDI
将与
DUFFENDIBGL
相同,因为它将被修剪为8个(或更少)字符。注意:如果您是从变量中插入变量,并且没有为变量指定长度,那么它们将被修剪为单个字符。对,但是如何插入很重要。例如,如果你像
DECLARE@code-NVARCHAR(8)=N'DUFFENDIBGL',@name-NVARCHAR(255)=N'Dizzee-Uffendi'那样插入它们;插入dbo.advisor(代码,名称)选择@Code,@Name
您将收到一条错误消息,说明您违反了密钥,因为在本例中,
DUFFENDIBGL
将被修剪为
DUFFENDI
。也许其他的例子做得很好。例如,如果您执行了我在示例中编写的操作,但将其改为
NVARCHAR(255)
,而不是
NVARCHAR(8)
,则不应看到错误消息。