加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-18 01:57:29 所属栏目:编程 来源:网络整理
导读:我必需行使以下技能来实现我的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.

(编辑:湖南网)

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

    热点阅读