![]() |
1
10
哈哈,试试这个:
谁会猜到呢? |
![]() |
2
2
我复制了SQL 2008 SP1上的行为,用SQL UDF替换clf udf dbo.get祖先。我尝试了表值函数和内嵌函数;两者都没有区别。 我还不知道发生了什么,但是其他人的好处,我将在下面包括我的定义。
选择上面的一个定义,然后运行它来观察它挂起:
第二批从来没有 开始 . 它已经过了解析阶段,但似乎在绑定和优化之间迷失了方向。 两个函数的主体在函数包装器之外编译为完全相同的执行计划:
非常有趣。在Microsoft Connect上提交错误报告,让他们告诉你发生了什么。 |
![]() |
3
1
这是一个猜测,只是一个猜测,但也许它与优化器如何很好地猜测最佳执行计划有关,但并没有对其进行详尽的搜索。 因此,查询执行的工作方式如下: 分析->绑定->优化->执行 两个查询的解析树肯定是不同的。绑定树是 可能 不同。我对绑定阶段还不太了解,无法确定地声明这一点,但是假设绑定树 是 不同的是,它可能需要不同数量的转换才能使A和B将树绑定到相同的执行计划。 如果需要两个额外的转换才能将查询B转换为~5ms计划,优化器可能会在发现它之前说“足够好”。而对于查询A,~5ms计划可能正好在搜索成本阈值内。 |
![]() |
4
0
在第一个语句中,您的联接是
你的第二句话是
但是,a也用作ct中dbo.getAncestors(c.node.getAncestor(1))的别名。试交换
也就是说,我不确定SQL Server在创建CTE时应用正确索引的能力有多强。我以前对此有过一些问题,并且使用了表变量,取得了很大的成功。 |
![]() |
5
-1
正如我理解的,在批量使用CTE时,您必须以“;”结束语句。它与with子句的解释有关。试试这个:
|
![]() |
Jack Skeletron · T-SQL三表求和 6 年前 |
![]() |
CSK · 列出sql server中存储过程中的存储过程 6 年前 |
![]() |
DRT · 从文本字段中提取多个日期 7 年前 |
![]() |
ihatemash · 确定可以合并哪些行的SQL查询 7 年前 |
![]() |
Shawn · 使用WinZip命令行的SQL Server作业 7 年前 |