2013-11-28 46 views
0

我需要根據select的結果創建一組insert語句。使用WHERE導出SELECT作爲INSERT

我發現在如此相似的問題,但據我所看到的,他們都考慮做一個全導出表的,但我需要運行與where條件特定查詢,說

select * from T where open_time > '2013-11-01 00:00:00' 

UPD:我需要一個腳本作爲輸出,因爲以後我會將這些行插入到單獨的數據庫中。

+0

新表或現有表? –

+0

@mr_eclair請參閱UPD – xaxa

回答

1
INSERT INTO Destination_Table (Column1, Column2, Column3, .....) 
SELECT Column1, Column2, Column3, .. 
FROM TABLE_Name --<-- Source Table Name 
WHERE Condition... --<--- any conditions or Filters here 

列和數據類型的INSERTSELECT聲明的數應與

如果犯規存在,您可以動態創建一個表做這個

目標表上創建一個表飛

SELECT Column1, Column2, Column3, ..  INTO New_Table_Name 
FROM TABLE_Name --<-- Source Table Name 
WHERE Condition... --<--- any conditions or Filters here 

* 警告* 如果由名稱New_Table_Name表已經存在,那麼你將不得不使用INSERT INTO方法,因爲使用SELECT INTO語法將拋出一個錯誤,在這種情況下

+0

請參閱UPD。 – xaxa

+0

好吧,如果列名和數據類型是相同的,你可以在任何地方使用它。 –

+0

但是,數據庫位於不同的服務器上,彼此沒有連接 – xaxa

0

選擇進入可以幫助你

SELECT LastName, FirstName, Phone 
INTO dbo.PhoneList492 
FROM Person.Contact 
WHERE Phone LIKE '492%' 
1

您可以使用動態SQL:

declare @sql nvarchar(max) = '' 

select @sql = @sql + 'insert into table1(column1, column2) values (' 
    + T.column1 + ',' + T.column2 + '); ' 
from T where open_time > '2013-11-01 00:00:00' 

print (@sql) 

這將生成insert語句,你可以複製並在以後使用。

根據數據類型的不同,您可能需要對其進行修改,您可能需要爲從T返回的列引用和格式化數據類型。

+0

如何不指定列的名稱?我需要選擇它們全部 – xaxa

+0

只要'insert into table1 values ...' – Szymon

+0

但是'values'怎麼樣。在你的腳本中你明確地使用他們的名字。 T.column1,.... – xaxa

0

您可以使用表格的列替換列名稱。

INSERT INTO NEW_T (Column1, Column2, Column2, ...) 
SELECT Column1, Column2, Column3, ... 
FROM T 
WHERE open_time > '2013-11-01 00:00:00' 

我假設你已經創建了新表NEW_T