我想从选择查询中创建一个临时表(我的表有很多列,因此我不想手动创建临时表)我使用以下查询:
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果此查询返回空行,则不会创建#TempTable
. 因此,我不能将其#TempTable
用于下一个查询。
有没有办法解决这个问题?
我想从选择查询中创建一个临时表(我的表有很多列,因此我不想手动创建临时表)我使用以下查询:
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果此查询返回空行,则不会创建#TempTable
. 因此,我不能将其#TempTable
用于下一个查询。
有没有办法解决这个问题?
如果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, ...);
这是因为您正在动态创建和填充临时表,而不是显式创建它。在这种情况下,您必须在创建临时表之前检查是否存在临时表。
尝试这个:
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
SELECT * INTO #TempTable FROM MyTable
Select * From #TempTable
您的查询
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果选择不返回任何行,将创建一个空表