代码之家  ›  专栏  ›  技术社区  ›  Control Freak

SQL Server 2005中的交叉联接值

  •  4
  • Control Freak  · 技术社区  · 10 年前

    我正在使用SQL Server 2005,我收到一个错误:

    关键字“VALUES”附近的语法不正确。

    尝试运行此查询时:

      SELECT T.N 
      FROM Table
      CROSS JOIN (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9)) as T(N)
      WHERE 1 = 1
    

    但在SQL Server 2008中不适用——在2008中效果很好。

    在SQL Server 2005中,我需要做什么才能使其正常工作?

    1 回复  |  直到 10 年前
        1
  •  7
  •   Gordon Linoff    10 年前

    只需使用 select 具有 union all 而是:

    SELECT T.N
    FROM Table CROSS JOIN
         (select 1 as n union all select 2 union all select 3 union all select 4 union all select 5 union all
          select 6 union all select 7 union all select 8 union all select 9
         ) as T(N)
    WHERE 1=1;
    

    或者,使用递归CTE,这样您就不必键入值:

    with t(n) as
          select 1 as n
          union all
          select n + 1
          from t
          where n < 9
         )
    select t.n
    from table1 cross join
         t
    where 1 = 1;