![]() |
1
69
这可能取决于您的数据库,但以下是MySQL 5的解决方案,其中包括使用一个变量:
您可能应该编辑您的问题,并指出您正在使用的数据库。 编辑:我找到了一个 solution 将T-SQL用于SQL Server。它与MySQL方法非常相似:
|
![]() |
2
36
适用于Microsoft SQL Server 2005/2008。ROW_NUMBER()函数是在2005年添加的。
编辑:
注: 当我测试时,@RN的增量似乎发生在将列设置为@RN之前,因此上面给出的数字从1开始。
编辑:
我刚刚注意到,您似乎希望在表中创建多个序列号。根据需要,您可以在SQL Server 2005/2008中通过添加
|
![]() |
3
4
如果要创建新的PrimaryKey列,请使用以下命令:
|
![]() |
4
3
为了让Shannon充分发挥作用,我必须编辑他的答案:
因为他的答案是试图更新T,在他的例子中,T是公共表表达式的名称,它抛出了一个错误。 |
![]() |
5
3
除了使用CTE或WITH外,还可以使用具有同一表的自联接的更新:
派生表别名b用于通过ROW_NUMBER()函数以及其他一些列生成序列,这些列构成虚拟主键。 通常,每行都需要一个唯一的序列值。 WHERE子句是可选的,它将更新限制为满足指定条件的行。 然后,将派生表联接到同一个表别名a,联接虚拟主键列,并将要更新的列设置为生成的序列。 |
![]() |
6
2
在oracle中,这项工作:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns009.htm#i1006297 |
![]() |
7
2
多年来,我一直使用这种技术来填充序数和按顺序编号的列。但是,我最近在SQL Server 2012上运行时发现了一个问题。在内部,查询引擎似乎正在使用多个线程应用更新,并且更新的谓词部分没有以线程安全的方式处理。为了使它再次工作,我必须将SQLServer的最大并行度重新配置为1个核心。
如果不这样做,您会发现大多数序列号在整个表中都是重复的。 |
![]() |
8
2
|
![]() |
9
0
加入数字表?它涉及到一个额外的表,但它不是临时的——您可以将数字表作为一个实用工具保留。 或 http://www.sqlservercentral.com/articles/Advanced+Querying/2547/ (后者需要免费注册,但我发现它是MS SQL Server的一个非常好的技巧和技术来源,很多都适用于任何SQL实现)。 |
![]() |
10
-1
信息技术 是 可能,但只能通过一些非常复杂的查询—基本上,您需要一个子查询来计算迄今为止选择的记录数,并将其用作序列ID。我曾经写过类似的东西—它工作了,但非常痛苦。 老实说,最好使用带有自动增量字段的临时表。 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 3 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 3 年前 |