代码之家  ›  专栏  ›  技术社区  ›  marc_s

在SQL Server中组合CTE“WITH”和a“WITH XMLNAMESPACES…”

  •  31
  • marc_s  · 技术社区  · 15 年前

    WITH XMLNAMESPACES 宣言?

    WITH 关键字坚持要成为“T-SQL批处理中的第一个”,但这并没有真正起作用。。。。

    我试过:

    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
    WITH CTEQuery AS
    (
    SELECT (list of fields)
        FROM dbo.MyTable
        WHERE (conditions)
    )
    SELECT * FROM CTEQuery
    

    消息156,15级,状态1,行2

    消息319,级别15,状态1,行2
    错误语法靠近 公共表表达式 跟踪上下文子句,前一个 语句必须以 分号。

    所以我试着准备第二个 使用分号:

    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
    ;WITH CTEQuery AS
    (
    SELECT (list of fields)
        FROM dbo.MyTable
        WHERE (conditions)
    )
    SELECT * FROM CTEQuery
    

    得到这个:

    消息102,级别15,状态1,行2
    “;”附近的语法不正确。

    然后我试着把 使用xmlnamespace

    WITH CTEQuery AS
    (
       WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
       SELECT (list of fields)
          FROM dbo.MyTable
          WHERE (conditions)
    )
    SELECT * FROM CTEQuery
    

    得到这个:

    消息156,15级,状态1,第4行
    关键字附近的语法不正确 “带”。
    消息319,级别15,状态1,行4
    错误语法靠近 公共表表达式 xmlnamespaces子句或更改 跟踪上下文子句,前一个 分号。
    消息102,级别15,状态1,第21行
    “)”附近的语法不正确。

    1 回复  |  直到 15 年前
        1
  •  58
  •   Greg Beech    15 年前

    WITH ,例如。

    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
    ,CTEQuery AS
    (
    SELECT (list of fields)
        FROM dbo.MyTable
        WHERE (conditions)
    )
    SELECT * FROM CTEQuery
    

    如果需要多个CTE表达式,则相同。您只需指定 一次,然后所有其他的 块只使用逗号而不是关键字。

    推荐文章