可以在UNION [ALL]中使用SELECT INTO子句吗?

Fer*_*een 143 sql sql-server

在SQL Server中,这将从Customers表中插入100条记录到tmpFerdeen: -

SELECT top(100)*
INTO tmpFerdeen
FROM Customers
Run Code Online (Sandbox Code Playgroud)

是否可以跨UNION ALL SELECT执行SELECT INTO: -

SELECT top(100)* 
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas
Run Code Online (Sandbox Code Playgroud)

不太确定在哪里添加INTO子句.

Chr*_*tal 201

这适用于SQL Server:

SELECT * INTO tmpFerdeen FROM (
  SELECT top 100 * 
  FROM Customers
  UNION All
  SELECT top 100 * 
  FROM CustomerEurope
  UNION All
  SELECT top 100 * 
  FROM CustomerAsia
  UNION All
  SELECT top 100 * 
  FROM CustomerAmericas
) as tmp
Run Code Online (Sandbox Code Playgroud)

  • "as tmp"有什么意义? (5认同)
  • @Dave,petric:在SQL Server中,需要为临时表指定名称.就这样.除了使SQL语句成为有效语句之外,tmp不提供任何其他功能.例如,在Oracle SQL上,这是可选的. (3认同)
  • 这也有效 SELECT top 100 * INTO tmpFerdeen FROM Customers UNION All SELECT top 100 * FROM CustomerEurope UNION All SELECT top 100 * FROM CustomerAsia UNION All SELECT top 100 * FROM CustomerAmericas (抱歉,无法在此处格式化 sql)。谢谢! (2认同)

Mar*_*ith 126

您根本不需要派生表.

刚刚放在第一个INTO之后SELECT

SELECT top(100)* 
INTO tmpFerdeen
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas
Run Code Online (Sandbox Code Playgroud)

  • @endurium - 我不同意你的不同意见。如果你知道语法的作用(你只需要学习一次),那就非常清楚了 (7认同)
  • 我不同意-尽管以上答案也是正确的,但接受的答案意图更明确 (2认同)
  • 这对我来说不是上面的解决方案 (2认同)

use*_*743 5

SELECT * INTO tmpFerdeen FROM 
(SELECT top(100)*  
FROM Customers 
UNION All 
SELECT top(100)*  
FROM CustomerEurope 
UNION All 
SELECT top(100)*  
FROM CustomerAsia 
UNION All 
SELECT top(100)*  
FROM CustomerAmericas) AS Blablabal
Run Code Online (Sandbox Code Playgroud)

这种"Blablabal"是必要的