SQL 如何创建 2 个计算键来创建 1 个复合键?
我想设计一个看起来像这样的表:
avaya nchar(6) NOT NULL,
开始日期日期时间不为空,
endDate 日期时间 NOT NULL,
super_assigned nvarchar(255) NOT NULL,
myID int NOT NULL IDENTITY (1, 1)
但我希望表停止任何插入/更新,其中 avaya
、startDate
和 sup_assigned
在任何记录中都相同,或者 avaya
、endDate
和 sup_assigned
在任何记录中都相同。
我应该如何最好地去做这件事?
我考虑过将包含 startDate
的 3 列集合转换为十六进制,然后添加它们创建 Key1
列,对包含 Key1 的其他 3 列执行相同的操作>endDate
并有一个 Key2
列。然后将Key1
和Key2
设置为复合键。
但我收到此错误:
- 无法创建表。
在此上下文中,用户定义的函数名称不能以数据库名称为前缀。
我应该如何使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
更好的方法是在字段本身上仅使用几个唯一键,而不是通过创建这些派生字段来对表进行反规范化:
这将防止在这 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:
That'll prevent any record from being inserted where either of those 3-way groupings are identical to some other record in the DB