问题标签 [common-table-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1955 浏览

sql-server - CTE 与多个刀片

众所周知,CTE 是在 SQL Server 2005 中引入的,并且人群变得疯狂。

我有一个案例,我将大量静态数据插入到表中。我想知道的是以下哪个更快,以及我应该注意哪些其他因素。

或者

我有一种不舒服的感觉,答案将取决于诸如触发器存在的东西MyTable……

(另外,我知道并且不在乎BULK INSERTCSV 和任何数量的其他方法客观上是更快更好的插入静态数据的方法。我特别想知道我应该注意的关于 CTE 与多个插入的问题。 )

0 投票
9 回答
81724 浏览

sql - CTE 错误:“锚点和递归部分之间的类型不匹配”

我正在执行以下语句:

...以错误结束...

我在哪里犯错?

0 投票
3 回答
1452 浏览

sql-server - 使用带有分面分组和计数的 TSQL 将表转换为 XML

我需要将表转换为带有值计数的 XML。

例如

我想要这样的输出。这需要是动态的,因此添加的新列或构面将生成这种类型的输出。

这可能吗?

如果列/值发生变化,我想要一个处理该问题的解决方案 - 例如,它将生成一个新的矩阵和依赖于数据的事实。

0 投票
3 回答
48317 浏览

sql - 我们如何在 sql server 的子查询中使用 CTE?

我们如何在 SQL Server 的子查询中使用 CTE?

喜欢:

SELECT id (I want to use CTE here), name FROM table_name

0 投票
2 回答
4415 浏览

sql-server - CTE SQL 查询获取完整路径

我有简单的查询

我对只返回从根到叶的完整路径的查询(最佳)很感兴趣。

例如结果的一部分是

零是根 18,19 是叶子(和孩子),我想部分忽略像0,8,12,16和这样的路径0,8,12,16,17,只得到完整的路径(以叶子结尾) 0,8,12,16,17,180,8,12,16,17,19

0 投票
3 回答
4274 浏览

sql - SQL递归CTE查询错误'无效的列名-级别'

尝试编写递归 CTE 查询,不断收到以下错误:level, invalid column name

这是查询,我哪里出错了?

这是 ms sql server 2005。

0 投票
1 回答
707 浏览

sql - SQL 递归 CTE 查询,奇数结果集 SQL Server 2005

我正在尝试在 SQL Server 2005 中编写递归 CTE 查询,但得到一组奇怪的结果。我的桌子是:

这是我的 CTE 查询:

好的,所以我现在得到了一个数据集返回,但是,它并不像预期的那样包含以下方式的重复:

如果有人可以向我解释为什么会发生这种情况以及我将如何纠正它,我将不胜感激。

至于我的最后一个问题,我将如何修改它以显示每个父母的初始 childID,如下所示:

0 投票
3 回答
402 浏览

sql-server - SQL Server 2005 - CTE,保留值并插入数据集中

假设您有一个这样的表(SQL SERVER 2005)

你有一个返回这个数据集的 CTE:

如何保存初始子 ID,以便获得此结果集:

所以基本上我正在做的是保留原来的孩子ID并返回它而不是另一个......

这是迄今为止的 CTE 查询,效果很好:

0 投票
5 回答
5075 浏览

sql-server - 奇怪的性能问题:内联用户定义函数中的公用表表达式

这是 SQL 人员的脑筋急转弯 - 谁能想到为什么第一个函数执行良好,而第二个函数运行缓慢的原因?

功能 A - 通常在 ~5 毫秒内完成

功能 B - 运行非常缓慢 - 5 分钟后我放弃了

我将在下面解释这个函数的作用,但在我开始之前,我想指出我认为这并不重要,因为据我所知,这两个函数是完全相同的! 唯一的区别是一个使用 CTE,一个使用子查询;A中子查询的内容和B中的CTE是相同的。

如果有人决定这很重要:此函数的目的只是挑选出层次结构中任意数量位置的所有可能的祖先(父母、祖父母等)。该Node列是一个hierarchyid,并且dbo.GetAncestors是一个 CLR 函数,它只是沿着路径走,它不做任何数据访问。

UniqueIntTable这就是它所暗示的 - 它是一个用户定义的表类型,只有一列,Value int NOT NULL PRIMARY KEY. 这里所有应该被索引的东西都被索引了——函数 A 的执行计划本质上只是两个索引搜索和一个哈希匹配,就像函数 B 一样。

这个奇怪问题的一些更奇怪的方面:

  • 我什至无法使用函数 B 获得一个简单查询的估计执行计划。看起来性能问题与这个看似简单的函数的编译有关。

  • 如果我从函数 B 中取出“主体”并将其粘贴到内联查询中,它会正常运行,与函数 A 的性能相同。所以它似乎只是UDF 内的 CTE 的问题,或者相反,只有使用 CTE 的 UDF。

  • 当我尝试运行 B 时,测试机器上一个内核上的 CPU 使用率一直飙升至 100%。似乎没有太多 I/O。

我想将其视为 SQL Server 错误并使用版本 A,但我总是尝试牢记规则 #1(“SELECT Ain't Broken”),并且我担心函数 A 的良好结果某种程度上是一种本地化的侥幸,它会像 B 在不同的服务器上一样“失败”。

有任何想法吗?


更新- 我现在包含一个完整的独立脚本来重现。

获取祖先函数

模式创建

上述代码/脚本可用于创建 CLR 函数/DB 模式;使用与原版相同的GoodFunction脚本BadFunction

0 投票
1 回答
3937 浏览

sql-server - 如何使用 CTE 映射父子关系?

假设我有一个表示树状结构化数据的项目表,我想不断向上跟踪,直到到达顶部节点,由 NULL 的 parent_id 标记。我的 MS SQL CTE(公用表表达式)会是什么样子?

例如,如果我要从Bender到达顶部的路径,它看起来像

喜剧

未来世界

本德

谢谢,这是示例数据: