Sql server 由于大小写不敏感,SQL server密钥冲突

Sql server 由于大小写不敏感,SQL server密钥冲突,sql-server,Sql Server,我有一个表,其中有一个主键,有两列代码nvarchar,值nvarchar。此表包含键列中的值,如X8900,a,但当我尝试插入一个新值,如X8900,a时,它会给出错误消息“主键冲突” 如果values列的大小写不同,为什么会给出此错误?是否有任何解决方案可以避免此错误?您必须检查数据库的排序规则。如果您有一个不区分大小写的排序规则,'a'='a'。如果需要保持大小写之间的差异,可以将排序规则更改为区分大小写的排序规则,也可以将字符串强制转换为varbinary。二进制表示法区分不同的情况 排

我有一个表,其中有一个主键,有两列代码nvarchar,值nvarchar。此表包含键列中的值,如X8900,a,但当我尝试插入一个新值,如X8900,a时,它会给出错误消息“主键冲突”


如果values列的大小写不同,为什么会给出此错误?是否有任何解决方案可以避免此错误?

您必须检查数据库的排序规则。如果您有一个不区分大小写的排序规则,'a'='a'。如果需要保持大小写之间的差异,可以将排序规则更改为区分大小写的排序规则,也可以将字符串强制转换为varbinary。二进制表示法区分不同的情况

排序规则可以在服务器级别设置,即数据库默认设置为什么,也可以在数据库级别覆盖服务器排序规则。在更细粒度的级别上,如果需要,可以对各个列设置排序规则。以下是几篇文章:

下面是一些SQL代码段,您可以运行这些SQL代码段来查看当前服务器排序规则以及每个数据库的默认排序规则

SELECT CONVERT (varchar, SERVERPROPERTY('collation'));

SELECT name, collation_name FROM sys.databases;

您可以指定SQL Server是区分大小写还是不使用排序规则。在这种情况下,列必须具有区分大小写的排序规则,以便您能够对其指定任何类型的唯一约束。例如,第一个示例将失败,而第二个示例将工作,请注意CI和CS不区分大小写和区分大小写

CREATE TABLE test1 (
col1 varchar(20) COLLATE Latin1_General_CI_AS PRIMARY KEY
)

INSERT INTO test1 VALUES ('ASD')
INSERT INTO test1 VALUES ('asd')

CREATE TABLE test2 (
col1 varchar(20) COLLATE Latin1_General_CS_AS PRIMARY KEY
)

INSERT INTO test2 VALUES ('ASD')
INSERT INTO test2 VALUES ('asd')
可以在列或数据库级别设置排序规则。如果在数据库级别设置,则所有未指定排序规则的字符列都采用数据库排序规则