不使用SELECT INTO创建临时表

时间:2015-01-12 10:02:20

标签: sql sql-server

我知道我可以使用SELECT * INTO语句来创建临时表。

但是,有没有办法只使用SELECT语句创建临时表?

假设我有一些类似SELECT * FROM Customers的SQL,是否可以编写如下的查询来创建临时表?

CREATE TABLE #Temp as (SELECT * FROM Customers)

2 个答案:

答案 0 :(得分:7)

简单的答案是:不,你不能做你在问题中所写的内容。

您可以通过两种方式创建和填充临时表\ table变量:

使用SELECT INTO:

SELECT *
INTO #TEMP
FROM Customers
WHERE 1=2 -- no matches will create an empty table

这将获取源表中的列和数据类型,并根据它们创建临时表。

将表格预先定义为变量或临时表:

-- table variable
DECLARE @Temp TABLE (Col1 int, Col2 int...);
-- or a temp table
CREATE TABLE #Temp (Col1 int, Col2 int...)

INSERT INTO @tmp (Col1, Col2...)
SELECT Col1, Col2...
FROM Customers

有了这个,您必须预先定义表格列和类型。

答案 1 :(得分:-3)

是的,你可以做到你所拥有的。

如果查询如下:

SELECT *
FROM Customers
WHERE Region = 'UK';

给出你想要的结果,你可以创建一个包含这些结果的相同结构的新表:

CREATE TABLE UK_Customers AS
SELECT *
FROM Customers
WHERE Region = 'UK';

根据您正在尝试做的事情,您可能需要查看“创建视图”以创建“虚拟”#34;表。