2011-02-03 37 views
1

在SQL Server 2008中,我選擇了低於文本輸出的語句。T-SQL從選擇中插入大量文本

'text1d', '文本2', '文字3'

'text3d', '文本2', 'text6'

'text1d', '文本2', 'text6'

'text18d', '文本2', '文字3

'text15',' 文本2' , 'text5'

.....

.....

我想將上面的輸出插入到Test1表中。

create table Test1 (c1 varchar(20),c2 varchar(20),c3 varchar(20)) 

我可以修改選擇腳本,如果有幫助,可以使用別的東西而不是'單引號'和'逗號'生成上面的輸出。

謝謝。

+0

你可以發佈你的`SELECT`語句,因爲它會使它更容易幫助。 – 2011-02-03 21:00:38

回答

1

不是很優化,但可能工作:

DECLARE @values VARCHAR(MAX) 
DECLARE c_select CURSOR FAST_FORWARD FOR 
SELECT <your statement here> 
OPEN c_select 
FETCH NEXT FROM c_select INTO @values 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC('INSERT INTO table2 (col1, col2, col3) VALUES (' + @values + ')') 
    FETCH NEXT FROM c_select INTO @values 
END 
CLOSE c_select 
DEALLOCATE c_select 
+0

謝謝先生。有效 :) – user219628 2011-02-03 22:09:34

0
INSERT INTO "table1" ("column1", "column2", ...) 
SELECT "column3", "column4", ... 
FROM "table2" 
0

爲什麼將列組合成一個分隔字符串只是爲了再次解析插入?

你就不能:

insert into Test1 
    (c1, c2, c3) 
    <variation of your original select> 
+0

因爲,我使用正則表達式作爲文本返回字符串。謝謝 – user219628 2011-02-03 21:04:33

0

你可以讓你的正則表達式FUNC返回XML。而不是這個'text1d','text2','text3'你可以建立這個<v>text1d</v><v>text2</v><v>text3</v>

下面是一個帶有模擬查詢的表變量的示例。

設置測試數據

declare @T table (txt varchar(50)) 

insert into @T values ('<v>text1d</v><v>text2</v><v>text3</v>') 
insert into @T values ('<v>text3d</v><v>text2</v><v>text6</v>') 
insert into @T values ('<v>text1d</v><v>text2</v><v>text6</v>') 
insert into @T values ('<v>text18d</v><v>text2</v><v>tex3t</v>') 
insert into @T values ('<v>text15</v><v>text2</v><v>text5</v>') 

你查詢應該返回什麼現在是在@T

txt 
<v>text1d</v><v>text2</v><v>text3</v> 
<v>text3d</v><v>text2</v><v>text6</v> 
<v>text1d</v><v>text2</v><v>text6</v> 
<v>text18d</v><v>text2</v><v>tex3t</v> 
<v>text15</v><v>text2</v><v>text5</v> 

下面是用於查詢中的列@ T.txt的XML插入語句。

insert into Test1 (c1, c2, c3) 
select 
    cast(txt as xml).value('v[1]', 'varchar(20)'), 
    cast(txt as xml).value('v[2]', 'varchar(20)'), 
    cast(txt as xml).value('v[3]', 'varchar(20)') 
from @T 

針對Test1的查詢會爲您提供此結果。

c1  c2 c3 
text1d text2 text3 
text3d text2 text6 
text1d text2 text6 
text18d text2 tex3t 
text15 text2 text5 

我想這也是這個問題的答案。 Insert into SQL server from Regular Expression returned text