如何解决SQL Server:多列键字典序
我在数据库中有两列设置为主键,比如 Code1
和 Code2
。我使用 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 举报,一经查实,本站将立刻删除。