0

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

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)

但我想停止任何插入/更新,其中avaya,startDatesup_assigned在任何记录中相同或avaya,endDatesup_assigned在任何记录中都相同。

我应该如何最好地做到这一点?

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

但我得到这个错误:

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

我应该如何使用 MS SQL 2005 做到这一点?

4

1 回答 1

5

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

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

这将防止插入任何记录,其中这些 3 路分组中的任何一个与数据库中的其他记录相同

于 2011-11-18T21:08:41.853 回答