加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 无法在SQL Server 2012上运行的T-SQL CTE实现技术

发布时间:2021-01-17 12:56:57 所属栏目:MsSql教程 来源:网络整理
导读:我必须使用以下技术来实现我的CTE并提高视图性能: WITH CTE AS( SELECT TOP 100 PERCENT ORDER BY ...)WITH CTE AS( SELECT TOP 2147483647 ORDER BY ...) 现在,这两种方式都不起作用.有没有人面临同样的问题或知道在SQL Server 2012中这个东西是无效的? 解

我必须使用以下技术来实现我的CTE并提高视图性能:

WITH CTE AS(
    SELECT TOP 100 PERCENT
    ORDER BY ...
)

WITH CTE AS(
    SELECT TOP 2147483647
    ORDER BY ...
)

现在,这两种方式都不起作用.有没有人面临同样的问题或知道在SQL Server 2012中这个东西是无效的?

解决方法

您可以尝试使用多步表值函数.这样,服务器就被迫将TVF的结果实现为表变量.此外,您可以在声明此表类型(PRIMARY KEY,UNIQUE,CHECK)时尝试使用声明性约束来提高最终查询的性能:
CREATE FUNCTION CocoJamboSchema.CocoJamboFunction(@parameters ...)
RETURNS @Results TABLE (
Col1 INT NOT NULL,Col2 VARCHAR(10) NULL,...
PRIMARY KEY(Col1)
)
AS
BEGIN
WITH MyCTE (...)
AS
(
...
)
INSERT @Results (...)
FROM MyCTE;

RETURN;
END;

SELECT ...
FROM CocoJamboSchema.CocoJamboFunction(param values) f
INNER JOIN MySchema.MyTable t ON f.Col1=t.Col1
ORDER BY t.Col1;

不要忘记将ORDER BY子句添加到最终查询中.

最近,我使用此解决方案来优化另一个视图(ViewB)使用的视图(ViewA,DISTINCT LEFT JOIN GETDATE()).在这种情况下(ViewA)无法创建索引视图(因为DISTINCT LEFT JOIN GETDATE()).相反,我创建了一个多语句TVF,它通过减少最终查询的逻辑读取(在某些情况下显着)来提高性能.

注意:当然,您可以尝试使用index view.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读