在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脚本,而不是“单引号”和“逗号”,如果有帮助的话。
感谢。
答案 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