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


91

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

例:

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

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

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


3
是。#创建临时表。没有它,创建表。
Jeow Li Huan

Answers:


151

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

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

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

请参考下面的临时表基础链接:http : //www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

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

它们就像存储在RAM中的任何其他变量一样,是最快的。 它们也存储在tempdb中,而不存储在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


11
在SQL Server中,SELECT语法为INSERT INTO @ ItemBack1 SELECT column1,column2,someInt,someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384

8
变量表不存储在RAM中,它们也存储在tempdb中。我建议不要使用表变量,除非您了解它们的某些缺点,因为它们的行数会自动设置为1,并且可能会导致错误的计划。
ConstantineK

您能否提供5000行,nvarchar(max),varbinary(max)限制的源?这是允许的,但是我不确定为什么不建议这样做。
布拉德(Brad)

1
我也认为表变量存储在内存中。我的立场是正确的:dba.stackexchange.com/a/16386/23720
Baodad

1
我也只会评论表变量存储在tempdb中这一事实。我正在评论,所以也许会有更多的人阅读评论并将其传达给头脑风暴,因为我已经厌倦了成为高级顾问进入联合公司的工作,不得不与无知的全职雇员争辩,并试图说不。我正在谈论《财富》 500强中的数十家公司,很高兴看到人们发表评论。很快,除非这个回答问题的OP实际编辑了他们的答案,否则我们将继续让这个无知的人持续十年左右。
汤姆·斯蒂克

14

这两个表之间的差值ItemBack1,并#ItemBack1在于,第一上是持久的(永久的),其中作为另一种是暂时的。

现在,如果再看看您的问题

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

答案是肯定的,因为没有这个#表,表将不是临时表,它将独立于所有会话和作用域。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.