【问题标题】:Returning 2 result sets from a sproc that has a CTE into a DataSet从具有 CTE 的存储过程中将 2 个结果集返回到数据集中
【发布时间】:2011-12-29 19:09:48
【问题描述】:

我的存储过程如下所示:

WITH MYCTE(...)
AS
(
..
)


SELECT cte.*
FROM MYCTE cte

SELECT *
FROM table1
  INNER JOIN MYCTE ...

所以对于单个结果集一切正常,我将最后一个 SELECT 语句添加到我的存储过程中,现在我收到一个错误,说它不知道 MYCTE 是什么。

为什么我不能这样做?

假设它以某种方式工作(根据您的建议),我是否必须更改我的 dataset.fill 调用以恢复 2 个结果集(表)?

【问题讨论】:

    标签: c# sql-server dataset common-table-expression


    【解决方案1】:

    您是否尝试返回单个结果集?然后你必须做一个 UNION 或者使用临时表或表变量来组合它们。

    但要回答这个问题:CTE 仅适用于单个 SELECT(或 UPDATE、DELETE 等)。它们实际上是 SELECT 语句的一部分。因此,当您进行第二次选择时,它不知道 MYCTE 应该是什么。

    【讨论】:

    • 现在说得通了。但是有没有办法分开并开始一个新的选择,然后让我的数据集把另一个选择放在另一个表中(在同一个存储过程中)?
    • 是的;事实上,这是默认行为,或者曾经是。 (显然,您必须使用未指定特定表名的 Fill 重载。)您是否遇到了不同的情况?
    • 如何将 cte 的结果存储到表变量中?如果我在 cte 代码上方定义表变量,它会抱怨。
    • @codecompleting 它的抱怨到底是什么?它向您显示什么错误消息? (您是否以分号结束声明?带有 CTE 的语句必须是第一个语句或前一个语句以“;”结尾)
    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多