2010-04-27 103 views
0

如何使用特定選擇查詢生成一些插入sql語句。 Sql Server 2008中是否有任何工具?要不然?從sql選擇語句中生成多個sql插入

+0

請說明你正在嘗試做的...不知道你是什麼意思「一些插入SQL語句」下 - 粘貼一個例子 – IMHO 2010-04-27 12:55:33

+0

@Matthew藤,@馬克拜爾斯沒有我不是說這兩個答案下面; 我告訴「生成」,所以我會郵寄給我的朋友,他在他的服務器上運行相同的數據庫.. – theklc 2010-04-27 12:56:56

+0

@IMHO 有一張表; SELECT * FROM X_TABLE WHERE X_CLASS ='A' 它返回81行。 所以想象那81行,我需要一個工具來生成81行插入句子,將它們插入數據庫。 PS:我以前用EXCEL的CONCANATE功能來做,但是這次有很多行..所以需要一個工具.. – theklc 2010-04-27 12:59:29

回答

2

像這樣的東西會產生一個INSERT語句列表。然後,您從輸出中複製並粘貼並運行INSERT。這遠非理想,但它有效。

SELECT 'INSERT table (col1, col2) 
     VALUES (''' + stringcolumn + ''', ' + CAST(intcolumn AS varchar) + ')' 
FROM sourcetable 
+0

這不會處理空值,並且引號不會被正確地轉義:''''' – 2010-04-27 13:13:26

+0

引號**正確地被轉義,但是,它不會處理空值 - 它很快並沒有全面的例子。 – 2010-04-27 13:28:13

+0

示例: SELECT'INSERT WFDocTypeField(WFDocTypeID,TableName,FieldName,DMSFieldName) VALUES('+ COALESCE(CONVERT(varchar(30),WFDocTypeID),'null')+','''+ CAST(TableName AS varchar )+ '' ' ''' + CAST(字段名AS VARCHAR)+ '' ' ''' + CAST(DMSFieldName AS VARCHAR)+ '' ')' FROM WFDocTypeField(NOLOCK) WHERE WFDocTypeID = 852 Thanx @David和@KM – theklc 2010-04-27 13:35:39

0

你的意思是這樣嗎?

SELECT 
    'INSERT INTO MyTable (Col1, Col2, Col3) VALUES (' + Col1 + ', ' + Col2 + ', ' + Col3 + ')' 
FROM 
    MyTable 

當然,你將需要封裝在引號某些領域,執行一些字符逃逸,將數字轉換成VARCHAR處理等

1

注意空值和數據類型轉換(SQL Server語法):

SELECT 
    'INSERT INTO YourTable (Col_int, Col_datetime, Col_varchar) VALUES (' 
     +COALESCE(CONVERT(varchar(30),Col_int),'null') 
     +','+COALESCE(''''+CONVERT(char(23),Col_datetime,121)+'''','null') 
     +','+COALESCE(''''+Col_varchar+'''','null') 
     +')' 
    FROM YourTable 
    WHERE ... 
0

爲什麼你想要一行一行地做?當您可以將它們全部插入到一個查詢中時,這是一項非常糟糕的技術。數據庫旨在比逐行操作更快地執行集合操作。

insert table1 (field1, field2) 
Select Field1, Field2 from Table2 where field3 >10 
+0

用於創建將在新數據庫上執行插入的腳本 – CRice 2010-10-29 01:11:27