-1

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

SELECT * INTO #TempTable
FROM MyTable
WHERE ...

如果此查询返回空行,则不会创建#TempTable. 因此,我不能将其#TempTable用于下一个查询。

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

4

3 回答 3

1

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

 SELECT * 
 INTO TempTable 
 FROM MyTable WHERE ...

没有返回任何行,它将创建一个空的TempTable,但如果没有与该WHERE子句匹配的行,它将不会在其中填充任何数据。但它应该TempTable至少创建具有与 相同结构的表,MyTable并且它将是空的。

例如这个:

SELECT * INTO TempTable FROM MyTable WHERE 1 <> 1;

TempTable将始终创建一个具有相同结构的空表,MyTable因为谓词1 <> 1始终为假。

但是,您可以像这样声明它:

DECLARE @Temp TABLE(Field1 int, ...);
于 2012-10-19T02:39:08.667 回答
0

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

尝试这个:

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

SELECT * INTO #TempTable FROM MyTable 
Select * From #TempTable
于 2012-10-19T02:43:55.590 回答
0

您的查询

SELECT * INTO #TempTable
FROM MyTable
WHERE ...

如果选择不返回任何行,将创建一个空表

于 2012-10-19T02:45:25.480 回答