在不使用 SELECT INTO 的情况下创建临时 table

Creating a temp table without using SELECT INTO

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

但是,有什么方法可以只使用 SELECT 语句来创建临时 tables 吗?

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

CREATE TABLE #Temp as (SELECT * FROM Customers)

简单的回答是:不,你不能按照你在问题中写的那样做。

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

用 SELECT INTO:

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

这将从源 table 中获取列和数据类型,并基于它们创建临时 table。

预先将 table 定义为变量或临时变量 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

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

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

如果这样的查询:

SELECT *
FROM Customers
WHERE Region = 'UK';

给出了你想要的结果,你可以创建一个新的 table 具有包含这些结果的相同结构,如下所示:

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

具体取决于您要执行的操作,您可能需要查看 CREATE VIEW 以创建 "virtual" tables。