gpt4 book ai didi

sql-server - 带有###(三重)或更多哈希值的临时表

转载 作者:行者123 更新时间:2023-12-04 23:49:12 28 4
gpt4 key购买 nike

我们知道,在 SQL Server 中,创建一个带有 # 的表表示“本地临时表”和 ##意思是“全局临时表”。

但是当我创建一个如下表时:

create table ###MyTable(IntColumn int, ValueColumn varchar(100))

该表是本地临时表还是全局临时表?我该如何测试?当我尝试 select它通过:
Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from ###MyTable -- I get the output

如果第三种情况为真,是不是表示这是一个名为 ###MyTable 的通用表? ?我不会像其他物理表一样在我的 SSMS 表浏览器中看到这张表吗?

如果我开始在表名前添加多个 #(哈希)会发生什么?

最佳答案

带有三重散列的表只是一个常规的全局临时表,其中第三个散列已成为表名的一部分,而不是做任何特殊的事情。

-- global temp table name: #temp
SELECT 1 AS value
INTO ###temp

-- global temp table name: temp
SELECT 2 AS value
INTO ##temp

-- temp table name: temp
SELECT 3 AS value
INTO #temp

select * from tempdb.INFORMATION_SCHEMA.TABLES

上面的 SQL 执行结果显示所有对象都如您所料添加到临时数据库中。

为了测试这个理论,如果您在新的查询窗口中运行以下命令,您应该只能使用 ## 访问全局临时表。字首:
-- this one is accessible
SELECT *
FROM ###temp

-- this one is accessible
SELECT *
FROM ##temp

-- this one won't work as it's out of scope in a new query window
SELECT *
FROM #temp

总之,第二个哈希之后的任何内容都成为表名的一部分,并将保存为全局临时表。

关于sql-server - 带有###(三重)或更多哈希值的临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26884520/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com