获取单行序列的下2个值

时间:2017-01-12 20:43:10

标签: sql-server sql-server-2014

MSSQL 2014

我正在对sql中的记录执行拆分。表MyTable的关键字由序列MySeq生成。给定一组记录,我想生成2个新密钥,然后我可以做一些工作然后插入子行。

MyTable
+----+
| Id |
+----+
|  1 |
+----+
|  2 |

现在选择我的两个新密钥:

SELECT Id,
       NEXT VALUE FOR MySeq AS ChildId1,
       NEXT VALUE FOR MySeq AS ChildId2
  FROM MyTable

我想:

+----+----------+----------+
| Id | ChildId1 | ChildId2 |
+----+----------+----------+
|  1 |        3 |        4 |
+----+----------+----------+
|  2 |        5 |        6 |

我明白了:

+----+----------+----------+
| Id | ChildId1 | ChildId2 |
+----+----------+----------+
|  1 |        3 |        3 |
+----+----------+----------+
|  2 |        4 |        4 |

我认为每行单次运行序列的原因与功能的设计有关。例如,看起来您可以从SELECT单独订购序列。

我有一个很好的解决方案(在初始INSERT之后更新表变量),但在我离开之前,我想我会看到是否有更自然的方法来获得结果我在找。

2 个答案:

答案 0 :(得分:2)

在这种情况下你可以做的是让序列增加两个

CREATE SEQUENCE MySeq AS 
INT
START WITH 0 
INCREMENT BY 2; 

然后做一个:

SELECT Id, 
  NEXT VALUE FOR MySeq AS ChildId1, 
  1 + NEXT VALUE FOR MySeq AS ChildId2 
FROM MyTable

答案 1 :(得分:0)

我可能是错的(因为我的MSSQL经验有限......我主要使用其他SQL程序)但你能不能简单地通过选择中的几个选择来解决这个问题?

即:

SELECT ID, ((SELECT MAX(ID) FROM MyTable)+ID) AS ChildId1, 
           ((SELECT MAX(ID) FROM MyTable)+ID+1) AS ChildId2 
FROM MyTable