在 SQL Server 中创建临时表是不是需要使用#?

Posted

技术标签:

【中文标题】在 SQL Server 中创建临时表是不是需要使用#?【英文标题】:Is it necessary to use # for creating temp tables in SQL server?在 SQL Server 中创建临时表是否需要使用#? 【发布时间】:2013-05-25 11:25:30 【问题描述】:

在SQL server中创建临时表之前需要使用#吗?

例子:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

对于 ItemBack1 是否需要使用 # 符号?

如果不是,那么# 在创建临时表时有什么用?

【问题讨论】:

是的。 # 创建临时表。没有它会创建一个表。 【参考方案1】:

是的。您需要在表名前加上“#”(哈希)来创建临时表。

如果您以后不需要该表,请继续创建它。 临时表与普通表非常相似。但是,它是在 tempdb 中创建的。 此外,它只能通过当前会话访问,即对于 EG:如果其他用户尝试访问您创建的临时表,他将无法访问。

“##”(双哈希创建“全局”临时表,其他会话也可以访问。

有关临时表的基础知识,请参阅以下链接: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

如果您的表格内容少于 5000 行且不包含 nvarchar(MAX)、varbinary(MAX) 等数据类型,请考虑使用表格变量。

它们是最快的,因为它们就像存储在 RAM 中的任何其他变量一样。 They are stored in tempdb as well, not in RAM。

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

有关表变量的更多信息: http://odetocode.com/articles/365.aspx

【讨论】:

在 SQL Server 中,SELECT 语法为 INSERT INTO @ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7 变量表不存储在 RAM 中,它们也存储在 tempdb 中。我建议不要使用表变量,除非您了解它们的一些缺点,因为它们的行数会自动设置为 1,并且可能会导致糟糕的计划。 你能给出 5000 行、nvarchar(max)、varbinary(max) 限制的来源吗?这是允许的,但我不确定为什么不建议这样做。 我也认为表变量存储在内存中。我纠正了:dba.stackexchange.com/a/16386/23720 我也只是要评论一下,表变量存储在 tempdb 中是一个事实。我在评论,所以也许更多的人阅读 cmets 并将其放在头脑中,因为我厌倦了作为高级顾问走进一家联合公司,不得不与一个无知并试图说其他话的全职员工争论。我正在谈论财富 500 强中的数十家公司,很高兴看到人们发表评论。可悲的是,除非这个回答问题的 OP 实际上编辑了他们的答案,否则我们将继续让这种无知的人再坚持十年左右。【参考方案2】:

ItemBack1#ItemBack1 这两个表之间的区别在于,第一个是持久的(永久的),而另一个是临时的。

现在如果再看看你的问题

在sql server中创建临时表是否需要使用#?

答案是是的,因为没有前面的#,该表将不是临时表,它将独立于所有会话和范围。

【讨论】:

以上是关于在 SQL Server 中创建临时表是不是需要使用#?的主要内容,如果未能解决你的问题,请参考以下文章

在 MS access passthru 中创建 sql server 临时表

如何在 SQL 中创建临时表以用于多个 ADF 活动?

在sqlserver中临时TMP表有啥作用?里面储存的都是啥数据?

sqlserver中创建一个表对象应该包括哪两个步骤?

显式删除临时表或让SQL Server处理它

关于sqlserver临时表的问题,请教高手!