自动增量对于不同的列是唯一的

时间:2014-06-06 15:04:08

标签: sql sql-server auto-increment

我要做的是创建一个看起来像这样的表....

ID as int
auto as int--this will be unique but only to the ID field
other fields....

意思是我想要这样的东西......

ID|Auto|other fields
--------------------
1 | 1 | ....
-------------------
1 | 2 | ....
-------------------
2 | 1 | ....
-------------------
2 | 2 | ....
-------------------

有没有办法让SQL自动执行此操作?

5 个答案:

答案 0 :(得分:1)

制作' auto'字段正常的自动增量。当您从数据库中读取它时,您可以选择ROW_NUMBER() OVER(PARTITION BY id ORDER BY auto)以获得所需的答案。

我意识到这是一个" X怎么做?不,你应该做Y而不是#34;样式答案,但有充分理由让DB处理自动增量字段而不是使用触发器滚动自己的解决方案。也许您可以扩展为什么要将这些数据存储在表中?

答案 1 :(得分:0)

尝试将row_number()partition clause

一起使用 像这样:

select *,Auto=row_number()over(partition by id order by id) from table

答案 2 :(得分:0)

“ID”是“身份”或“标识符”的缩写,通常意味着唯一性。我假设你想要一个基于另一列的增量,而不是一个唯一的列。

首先想到的解决方案是触发器,它允许您在插入发生后修改行。

要小心,因为您可能需要考虑奇怪的情况 - 例如,如果序列的开头或中间的行被删除会发生什么?是否重新排序所有行?

如果您需要稍后在查询中对行进行排序,则写入行的时间戳可能是更好的解决方案。

答案 3 :(得分:0)

在insert语句中,您需要选择最大值auto并添加1:

insert into table
select
    ((select max(auto) from table where id = id) + 1) as auto
   ,nextfield1
   ,nextfield2
...

答案 4 :(得分:0)

不确定您的实施细节是什么,但这是hierarchyid数据类型旨在解决的问题。

这里是SQL Server中的一些general information on hierarchical data

只有两个级别,你的情况可能不太合适,但建立一个具有灵活性和变革空间的模型有很大的好处。

警告 - 它确实存在一些限制,例如实体框架中缺乏支持。

更新:请注意,这会将您的两列合并为一列。