公用表表达式和表变量的用法区别?
在 SQL Server 中,提供的 WITH PurchaseCount AS (...)
语法定义的是一个 公用表表达式(CTE),它与表变量在作用范围、生命周期、性能特性和适用场景上有显著区别。以下是两者的核心对比:
⚙️ 1. CTE(公用表表达式)的特点
-
定义方式:
使用
WITH
子句定义,仅作为临时命名结果集,不物理存储数据。示例:
WITH PurchaseCount AS (SELECT HYID, SUM(N) AS TransactionCountFROM V_HYXSRWHERE CRMJZRQ BETWEEN @StartDate AND @EndDateGROUP BY HYID ) SELECT * FROM PurchaseCount;
-
作用域与生命周期:
-
仅在 当前查询语句内有效(即紧随其后的
SELECT/INSERT/UPDATE/DELETE
语句)。 -
查询结束后自动销毁,无法跨批处理或会话复用。
-
-
性能特性:
-
-