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

Aru*_* CM 91 sql sql-server sql-server-2005 sql-server-2008

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

例:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7
Run Code Online (Sandbox Code Playgroud)

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

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

小智 150

是.您需要在表名前加上"#"(哈希)来创建临时表.

如果您以后不需要该表,请继续并创建它.临时表与普通表非常相似.但是,它在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;
Run Code Online (Sandbox Code Playgroud)

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

  • 在SQL Server中,SELECT语法是INSERT INTO @ ItemBack1 SELECT column1,column2,someInt,someVarChar FROM table2 WHERE table2.ID = 7 (11认同)
  • 变量表不存储在RAM中,它们也存储在tempdb中.我建议不要使用表变量,除非你理解它们的一些缺点,因为它们的行计数自动设置为1,并且可能导致错误的计划. (8认同)

zzl*_*ani 14

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

现在再来看看你的问题吧

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

答案是肯定的,因为如果没有这个,#那么在表之前不会是临时表,它将独立于所有会话和范围.