将序列与union结合使用的SQL Server选择

时间:2016-05-26 12:16:24

标签: sql sql-server

CREATE SEQUENCE id AS INTEGER START WITH 1 INCREMENT BY 1;

WITH source (Id, SomeColumn) AS
(
          SELECT NEXT VALUE FOR id, 'some value 1'
          UNION
          SELECT NEXT VALUE FOR id, 'some value 2'
)
SELECT * FROM source;

DROP SEQUENCE id;

它会抛出以下错误:

  

检查约束中不允许使用NEXT VALUE FOR函数,默认值   对象,计算列,视图,用户定义的函数,用户定义的   聚合,用户定义的表类型,子查询,公用表   表达式,派生表或返回语句。

为什么NEXT VALUE FOR功能无法与unions一起使用? 什么是好的选择?

我使用类似的CTE使用merge语句为默认值播种表。我试图避免手动输入一系列数字。

我需要像UNION SELECT id ++

这样的东西

1 个答案:

答案 0 :(得分:0)

根据Alex的评论和类似问题的链接,这里是解决方案:

WITH source (SomeColumn) AS
(
          SELECT 'some value 1'
    UNION SELECT 'some value 2'
)
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), SomeColumn FROM source;

供将来参考:ROW_NUMBER() OVER (ORDER BY (SELECT NULL))是在不订购集合

的情况下获取行号的方法