Tsql T-SQL临时数据比较#与

Tsql T-SQL临时数据比较#与,tsql,Tsql,我使用基本SQL已经有两年了。但是,直到最近我才遇到“WITH”命令。根据我的研究,看起来“WITH”是一种创建临时表的方法。但根据我的经验,您也可以使用散列“#”来创建临时表 我试着用“WITH”和“#”搜索,但由于这些都是奇怪的搜索词,我没有得到多少结果 有没有人能告诉我它们之间的区别,比如各自的优缺点?您可以使用和来创建一个通用表表达式(CTE)。从技术上讲,它不是临时表 临时表与任何其他表类似,但它存储在tempdb中,并在连接关闭时删除 不过,与临时表不同,CTE实际上没有物理存储。它

我使用基本SQL已经有两年了。但是,直到最近我才遇到“WITH”命令。根据我的研究,看起来“WITH”是一种创建临时表的方法。但根据我的经验,您也可以使用散列“#”来创建临时表

我试着用“WITH”和“#”搜索,但由于这些都是奇怪的搜索词,我没有得到多少结果


有没有人能告诉我它们之间的区别,比如各自的优缺点?

您可以使用
来创建一个通用表表达式(CTE)。从技术上讲,它不是临时表

临时表与任何其他表类似,但它存储在
tempdb
中,并在连接关闭时删除

不过,与临时表不同,CTE实际上没有物理存储。它更像是一个“视图”

。与为连接保留的临时表不同,CTE是:

在单个SELECT、INSERT、UPDATE、DELETE或CREATE VIEW语句的执行范围内定义


WITH
是一个动态创建的表(在内存中),因此它可能比临时(#)表快得多,而临时(#)表与任何其他表一样,但在关闭连接时会自动删除它。缺点是它只在一次声明中有效