SQL 如何创建 2 个计算键来创建 1 个复合键?

发布于 2024-12-17 01:39:21 字数 721 浏览 0 评论 0原文

我想设计一个看起来像这样的表:

avaya nchar(6) NOT NULL,
开始日期日期时间不为空,
endDate 日期时间 NOT NULL,
super_assigned nvarchar(255) NOT NULL,
myID int NOT NULL IDENTITY (1, 1)

但我希望表停止任何插入/更新,其中 avayastartDatesup_assigned 在任何记录中都相同,或者 avayaendDatesup_assigned 在任何记录中都相同。

我应该如何最好地去做这件事?

我考虑过将包含 startDate 的 3 列集合转换为十六进制,然后添加它们创建 Key1 列,对包含 Key1 的其他 3 列执行相同的操作>endDate 并有一个 Key2 列。然后将Key1Key2设置为复合键。

但我收到此错误:

  • 无法创建表。
    在此上下文中,用户定义的函数名称不能以数据库名称为前缀。

我应该如何使用 MS SQL 2005 执行此操作?

I want to design a table which looks something like this:

avaya nchar(6) NOT NULL,
startDate datetime NOT NULL,
endDate datetime NOT NULL,
sup_assigned nvarchar(255) NOT NULL,
myID int NOT NULL IDENTITY (1, 1)

But I want to table to stop any inserts/updates where the avaya, startDate, and sup_assigned are the same in any record OR the avaya, endDate, and sup_assigned are the same in any record.

How should I best go about doing this?

I thought about converting the set of 3 columns which include the startDate into hex and then add them creating Key1 column, doing the same with the other 3 columns which include the endDate and have a Key2 column. Then setting Key1 and Key2 as a composite key.

But I get this error:

  • Unable to create table.
    A user-defined function name cannot be prefixed with a database name in this context.

How should I do this using MS SQL 2005?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟燃烟灭 2024-12-24 01:39:21

更好的方法是在字段本身上仅使用几个唯一键,而不是通过创建这些派生字段来对表进行反规范化:

UNIQUE KEY key_a (avaya, startDate, sup_assigned)
UNIQUE KEY key_b (avaya, endDate, sup_assigned)

这将防止在这 3 路分组中的任何一个与某些分组相同的情况下插入任何记录。数据库中的其他记录

A better method is to use just a couple unique keys on the fields themselves, rather than de-normalizing the table by creating those derived fields:

UNIQUE KEY key_a (avaya, startDate, sup_assigned)
UNIQUE KEY key_b (avaya, endDate, sup_assigned)

That'll prevent any record from being inserted where either of those 3-way groupings are identical to some other record in the DB

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文