SQL如何创建2个计算密钥,创建1个复合密钥?

Cod*_*ome 0 sql hex sql-server-2005 primary-key composite-primary-key

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

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在任何记录一样.

我该怎么做才能做到这一点?

我考虑过转换包含startDateinto为hex 的3列的集合,然后添加它们创建Key1列,与包含the endDate和列的其他3列相同Key2.然后设置Key1Key2作为复合键.

但我得到这个错误:

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

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

Mar*_*c B 5

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

UNIQUE KEY key_a (avaya, startDate, sup_assigned)
UNIQUE KEY key_b (avaya, endDate, sup_assigned)
Run Code Online (Sandbox Code Playgroud)

这将阻止插入任何记录,其中任何一个3路分组与DB中的其他记录相同