【问题标题】:Creating a temp table without using SELECT INTO不使用 SELECT INTO 创建临时表
【发布时间】:2015-01-12 10:02:19
【问题描述】:

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

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

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

CREATE TABLE #Temp as (SELECT * FROM Customers)

【问题讨论】:

  • 你面临什么样的场景,你想这样做?
  • CREATE TABLLE..INSERT INTO..SELECT 构造

标签: sql sql-server


【解决方案1】:

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

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

使用 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

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

【讨论】:

  • 嗨坦纳,感谢您的回复。
【解决方案2】:

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

如果查询如下:

SELECT *
FROM Customers
WHERE Region = 'UK';

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

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

根据您要执行的具体操作,您可能希望查看 CREATE VIEW 以创建“虚拟”表。

【讨论】:

  • 您好托尼,感谢您的回复。当我尝试使用您提到的代码时,我收到错误,因为“as”附近的语法不正确。你能帮忙吗?它对你有用吗?
猜你喜欢
  • 2012-07-14
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多