微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server:多列键字典序

如何解决SQL Server:多列键字典序

我在数据库中有两列设置为主键,比如 Code1Code2。我使用 Entity Framework 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' 彼此相等,因此您不能在此处强制违反主键。似乎您在这里真正需要的是 2 个限制条件;第一个确保 Code1 的值小于 Code2,然后是主键约束。在 T-SQl 中,这将定义如下:

CREATE TABLE dbo.YourTable (Code1 char(4) NOT NULL,Code2 char(4) NOT NULL,pkey AS Code1 + Code2 PERSISTED);
GO
ALTER TABLE dbo.YourTable ADD CONSTRAINT CK_CodeOrder CHECK (Code1 < Code2);
GO
ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY NONCLUSTERED (Pkey); --As this doesn't doesn't appear to be always ascending
GO

INSERT INTO dbo.YourTable (Code1,Code2)
VALUES('AA01','AB01');
GO
INSERT INTO dbo.YourTable (Code1,Code2)
VALUES('AB01','AA01'); --Fails as Code1 is greater than Code2
GO

在您的应用程序中,您可能希望检查 Code1 是否也小于 Code2,如果不是,则“交换”这些值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。