2011-04-06 68 views
3

這是re 我想通過SELECT INTO使用查詢結果創建表。 語法使用SELECT INTO與多行

SELECT * 
INTO Persons_Backup 
FROM Persons 

非常接近我想要實現的,與不同之處,我想從使用查詢源。

我的情況比這些簡單的例子複雜一點。

我需要創建一個表並同時插入多行。如果我可以(我不能)使用以前創建表的聲明是這樣的:

INSERT INTO Person_Backup12 (Col1, Col2, Col3) 
Select 1, 'a','2001-01-01 12:00' 
UNION ALL 
Select 83, 'z','2011-09-30 13:27' 
UNION ALL 
Select 777, 'k','1997-04-25 09:27' 

我能做到這一點,而在同一時間創建表?

+0

如果你正在移動大量的數據,那麼'SELECT INTO'不是這樣做的最有效的方法。如果可能的話,請按照'CREATE TABLE'' INSERT INTO'的方法。 – tobias86 2011-04-06 12:29:38

回答

4

你可以把你的查詢放到一個公用表表達式或派生表中,然後SELECT ... INTO

;WITH cte (Col1, Col2, Col3) AS 
(
Select 1, 'a','2001-01-01 12:00' 
UNION ALL 
Select 83, 'z','2011-09-30 13:27' 
UNION ALL 
Select 777, 'k','1997-04-25 09:27' 
) 
SELECT * 
INTO NewTable 
FROM cte 

在這種情況下,你可能會需要一些顯式轉換,以獲得所需的列數據類型(datetime而不是char等)

+0

你是明星!謝謝。我甚至沒有考慮使用CTE。太好了! – callisto 2011-04-06 12:26:46

2

這是可能的,是:

SELECT * 
INTO Persons_Backup 
FROM 
(
    Select 1 AS Col1, 'a' AS Col2,'2001-01-01 12:00' AS Col3 
    UNION ALL 
    Select 83 AS Col1, 'z' AS Col2,'2011-09-30 13:27' AS Col3 
    UNION ALL 
    Select 777 AS Col1, 'k' AS Col2,'1997-04-25 09:27' AS Col3 
) AS SomeQuery 
3

一個CTE應該沒有必要:

Select 1 as 'Col1', 'a' as 'Col2','2001-01-01 12:00' as 'Col3' 
INTO Person_Backup12 
UNION ALL 
Select 83, 'z','2011-09-30 13:27' 
UNION ALL 
Select 777, 'k','1997-04-25 09:27' 

2008年r2對我來說工作得很好。

+0

+1沒有意識到這是有效的。 – 2011-04-06 12:40:18

+1

@Martin - 我工作的很多人都經常使用'SELECT INTO',所以我知道的比我想要的更多:) – JNK 2011-04-06 12:45:20