Sql server SQL Server:多列键字典顺序
我在数据库中有两列被设置为主键,比如说Sql server SQL Server:多列键字典顺序,sql-server,.net-core,entity-framework-core,primary-key,lexicographic-ordering,Sql Server,.net Core,Entity Framework Core,Primary Key,Lexicographic Ordering,我在数据库中有两列被设置为主键,比如说Code1和Code2。我使用实体框架fluent api创建密钥,如下所示: entity.HasKey(p => new { p.Code1, p.Code2 }).HasName("table_pkey"); 我需要的是钥匙按字典顺序排列。例如,当我在数据库中有一条记录时 var code1 = "AA01"; var code2 = "AB01"; var pkey = "
Code1
和Code2
。我使用实体框架fluent api创建密钥,如下所示:
entity.HasKey(p => new { p.Code1, p.Code2 }).HasName("table_pkey");
我需要的是钥匙按字典顺序排列。例如,当我在数据库中有一条记录时
var code1 = "AA01";
var code2 = "AB01";
var pkey = "AA01AB01";
我想补充一点
var code1 = "AB01";
var code2 = "AA01";
var pkey = "AB01AA01";
我希望这被视为一个重复的数据库密钥,所以它将不允许添加它们
感谢您的帮助
'AA01AB01'
和'AB01AA01'
彼此不相等,因此您不能在此处强制违反主键。似乎你在这里真正需要的是两个约束条件;第一个用于确保Code1
的值小于Code2
,然后是主键约束。在T-SQl中,定义如下:
CREATE TABLE dbo.YourTable(Code1 char(4)不为空,
代码2字符(4)不为空,
pkey作为代码1+代码2保存);
去
ALTER TABLE dbo.YourTable添加约束检查代码顺序检查(代码1<代码2);
去
ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable主键非聚集(Pkey)--因为这并不总是在上升
去
插入dbo.YourTable(代码1,代码2)
值('AA01','AB01');
去
插入dbo.YourTable(代码1,代码2)
值('AB01','AA01')--失败,因为代码1大于代码2
去
在应用程序中,您可能希望检查Code1
是否也小于Code2
,如果不小于,则“交换”值