SQL Server相当于Oracle按级别和伪列连接

SQL Server相当于Oracle按级别和伪列连接,sql,sql-server,oracle,Sql,Sql Server,Oracle,请帮助将Oracle查询转换为SQL Server等效查询: SELECT (LEVEL+1-1) AS lvl FROM dual CONNECT BY LEVEL <= 10 / 我知道SQL Server中有层次结构方法和内置方法,如GetLevel等。这可以用来得到同样的结果吗 如果需要(不确定)创建双表-从此处复制: 特别是寻找可以使用smth的示例。类似于查询中的级别。例如:表中只有一个开始日期-2013年4月22日。但对于级别,我可以按如下方式增加它: SELECT

请帮助将Oracle查询转换为SQL Server等效查询:

SELECT (LEVEL+1-1) AS lvl 
  FROM dual
CONNECT BY LEVEL <= 10
/
我知道SQL Server中有层次结构方法和内置方法,如
GetLevel
等。这可以用来得到同样的结果吗

如果需要(不确定)创建双表-从此处复制:

特别是寻找可以使用smth的示例。类似于查询中的级别。例如:表中只有一个开始日期-2013年4月22日。但对于级别,我可以按如下方式增加它:

SELECT start_date, start_date+LEVEL-1 AS start_date_btwn
  FROM my_tab
 WHERE id = 1
CONNECT BY LEVEL<=10
/

START_DATE    START_DATE_BTWN
------------------------------
4/22/2013    4/22/2013
4/22/2013    4/23/2013
4/22/2013    4/24/2013
4/22/2013    4/25/2013
......
4/22/2013    4/30/2013
选择开始日期,开始日期+级别1作为开始日期
从我的账单上
其中id=1

按级别连接我过去使用的一种方法是查询
spt\u值
如下:

SELECT number
FROM master..spt_values
WHERE 
    type = 'P'
    AND number <= 255
选择数字
从主..spt_值
哪里
类型='P'

你需要的最大数字是多少?@sgeddes-不,在Oracle中可以是任意数字,而不是我的示例中的10。为了简单起见,我将示例限制为10。谢谢你。@Martin-谢谢你。这很有帮助。由于没有oracle实例,我不得不阅读一些文档。我认为递归CTE与您在T-SQL中所能得到的最接近。@sgedes-谢谢。仍在寻找与LEVEL伪列相同的值。我也希望有层次结构方法的例子。@Art-我们没有看到与level列等效的例子(尽管SQL Server在内部跟踪它以查看是否达到了最大递归限制),但是像@Martin中那样自己添加level列是很简单的-非常好的例子,非常感谢。
SELECT start_date, start_date+LEVEL-1 AS start_date_btwn
  FROM my_tab
 WHERE id = 1
CONNECT BY LEVEL<=10
/

START_DATE    START_DATE_BTWN
------------------------------
4/22/2013    4/22/2013
4/22/2013    4/23/2013
4/22/2013    4/24/2013
4/22/2013    4/25/2013
......
4/22/2013    4/30/2013
SELECT number
FROM master..spt_values
WHERE 
    type = 'P'
    AND number <= 255
WITH CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number+1
  FROM CTE 
  WHERE Number < 100 
)
SELECT * FROM CTE