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

时间:2011-11-18 21:05:15

标签: sql sql-server-2005 hex 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,{{startDate {{} sup_assignedavayaendDate相同的位置停止任何插入/更新1}}和sup_assigned在任何记录中都是相同的。

我最好怎么做呢?

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

但是我收到了这个错误:

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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