我要做的是创建一个看起来像这样的表....
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自动执行此操作?
答案 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。
只有两个级别,你的情况可能不太合适,但建立一个具有灵活性和变革空间的模型有很大的好处。
警告 - 它确实存在一些限制,例如实体框架中缺乏支持。更新:请注意,这会将您的两列合并为一列。