在 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 临时表