T-SQL从Select中插入批量文本

时间:2011-02-03 20:56:03

标签: tsql select insert

在SQL server 2008中,我有select语句在文本输出下面吐出。

  

'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))

我可以使用其他内容修改生成上述输出的select脚本,而不是“单引号”和“逗号”,如果有帮助的话。

感谢。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为什么要将列组合成一个分隔的字符串,只是为了插入它再次解析它?

不能只是:

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

答案 3 :(得分:0)

你可以使你的regexp函数返回一个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>

这是insert语句,用于查询@ 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