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
之后更新表变量),但在我离开之前,我想我会看到是否有更自然的方法来获得结果我在找。
答案 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