对于某些性能改进,我正在考虑使用临时表而不是表变量
我目前使用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)
答案 0 :(得分:5)
您的查询的问题是所有子查询都需要SQL中的表别名:
SELECT *
INTO #tempTable
FROM (SELECT * FROM Table2) t;
答案 1 :(得分:1)
简短回答是肯定的(我相信我之前做过这个,不久之前,但我不记得任何问题)。您可以在msdn上的这篇文章中获得更多信息:
答案 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表必须存在。