我想从select查询创建临时表(我的表有很多列,因此我不想手动创建临时表) 我使用以下查询:
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果此查询返回空行,则不会创建#TempTable
。因此,我无法将此#TempTable
用于下一次查询。
有没有办法解决这个问题?
答案 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不返回行,将创建一个空表