是否可以将SELECT INTO应用于另一个SELECT的临时表?

时间:2013-12-20 13:56:28

标签: sql sql-server

对于某些性能改进,我正在考虑使用临时表而不是表变量

我目前使用INSERT INTO @table EXECUTE sp_executesql @SQLString将100,000或行放入表变量中(其中@SQLString返回一个字符串'SELECT'INSERT INTO LiveTable Values('x','y','z')build by动态SQL,以便x,y,z值来自真实记录)

INSERT INTO需要花费一些时间,我想知道,如果您已经阅读了SELECT * INTO #tempTable有多好,是否可以使用另一个SELECT作为源SELECT * INTO?< / p>

类似

SELECT * INTO #tempTable FROM (SELECT * FROM Table2)

4 个答案:

答案 0 :(得分:5)

您的查询的问题是所有子查询都需要SQL中的表别名:

SELECT *
INTO #tempTable
FROM (SELECT * FROM Table2) t;

答案 1 :(得分:1)

简短回答是肯定的(我相信我之前做过这个,不久之前,但我不记得任何问题)。您可以在msdn上的这篇文章中获得更多信息:

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/92e5fdf0-e2ad-4f1c-ac35-6ab1c8eec642/select-into-localvarname-from-select-subquery

答案 2 :(得分:1)

SELECT * INTO #tempTable FROM (SELECT * FROM Table2)T

   SELECT * INTO #tempTable FROM Table2

答案 3 :(得分:0)

SELECT * INTO #TempTable 
FROM table_name

你可以这样做,需要注意的是,这个#TempTable将在运行中创建,这意味着如果有一个Temp表已经存在使用此错误将抛出错误,因为它将尝试创建Temp表1st,然后将数据插入其中。

要将数据插入已存在的表中,您必须使用INSERT INTO语法,例如

INSERT INTO #TempTable      --<-- When using this syntax it is best practice to always
SELECT Col1, COl2, ....       -- mention the Column names in INSERT INTO and SELECT
FROM TableName                -- rather then using SELECT * to makes sure data is being
                              -- selected from and insert into the RIGHT columns 

因为您已经提到过您正在使用它与存储过程,并希望使用这种语法与存储过程,我很抱歉你将无法做任何事情,如

SELECT * INTO #Temp Execute usp_Proc 

为此你必须坚持

INSERT INTO #TempTable  Execute usp_Proc 

在从存储过程中向其中插入数据之前,Temp表必须存在。