在 MS SQL 2005 或 2008 中自动递增多个标识列
Posted
技术标签:
【中文标题】在 MS SQL 2005 或 2008 中自动递增多个标识列【英文标题】:Auto increment over multiple identity columns in MS SQL 2005 or 2008 【发布时间】:2011-03-07 05:17:46 【问题描述】:我想在 MS SQL 中有两个不同的表,例如用户和组,都带有标识列。可以在两个标识列上创建自动增量吗?我想要第三个表,其中包含这两个表的共同信息,并且我想识别唯一记录。
在 Oracle 中是 SEQUENCE。
有可能吗?
谢谢,
马丁·皮尔奇
【问题讨论】:
【参考方案1】:对于 SQL Server,您获得了 Identity property。
您的第三个表应该通过foreign key 引用用户和组。
要实现第三个表中两列的唯一性,只需使用唯一约束,如下所示:
CREATE TABLE Third (
id_user INT references Users(id),
id_group INT references Groups(id),
CONSTRAINT user_group_unique UNIQUE(id_user, id_group)
);
【讨论】:
【参考方案2】:我不确定您在寻找什么,但您可以使用IDENTITY
属性在 SQL Server 中设置自动递增字段:
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
);
在上面的示例中(取自链接页面),id_num
字段将自动递增,从种子 1 开始并递增 1。
您可以在每个表上都有这样一个字段,也可以在一个多对多表上连接两者。
【讨论】:
【参考方案3】:Afaik,SQL Server 没有可以在多个表中使用命名标识的概念(参见 Oracles SEQUENCE
)
您有几个选项可以区分来自两个表的数据
在两个表中使用GUID 作为您的 ID 列。 在您的第三个表中,操作两个表之一的 ID,再次生成唯一 ID(例如与 -1 相乘)。 我假设您的第三张表将是其他两张表的视图。 重新考虑您的设计,了解为什么需要这样的构造。如果无法更改设计,我会首选使用 GUID。
【讨论】:
GUID 是解决方案,但它太大 - 16 字节。我会尝试用另一种方式解决它以上是关于在 MS SQL 2005 或 2008 中自动递增多个标识列的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 2008 中的 REPLACE 函数与 T-SQL 2005 不同
SQL 2005 Express Edition - 安装新实例
什么是自动从 2005 数据库同步 sql server 2008 数据库的好方法?
sql server2008备份出来的数据库如何在在sql server 2005或2000中还原