如果结果为空,则无法从选择查询创建临时表

时间:2012-10-19 02:32:37

标签: sql sql-server tsql temp-tables

我想从select查询创建临时表(我的表有很多列,因此我不想手动创建临时表) 我使用以下查询:

SELECT * INTO #TempTable
FROM MyTable
WHERE ...

如果此查询返回空行,则不会创建#TempTable。因此,我无法将此#TempTable用于下一次查询。

有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:1)

如果您发布的代码中的查询SELECT * FROM MyTable WHERE ...

 SELECT * 
 INTO TempTable 
 FROM MyTable WHERE ...

没有返回任何行, 创建一个空TempTable,但如果没有与{匹配的行,则它不会填充其中的任何数据{1}}条款。但它应该创建表WHERE至少与TempTable具有相同的结构,它将为空。

例如:

MyTable

始终会创建一个与SELECT * INTO TempTable FROM MyTable WHERE 1 <> 1; 具有相同结构的空表TempTable,因为谓词MyTable始终为false。

但是你可以这样声明:

1 <> 1

答案 1 :(得分:0)

这是因为您正在动态创建和填充临时表而不是显式创建它。在这种情况下,您必须在创建临时表之前检查是否存在临时表。

试试这个:

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
    DROP TABLE #TempTable
END

SELECT * INTO #TempTable FROM MyTable 
Select * From #TempTable

答案 2 :(得分:0)

您的查询

SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果select不返回行

将创建一个空表