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

Tsql T-SQL从Select中插入批量文本,tsql,select,insert,Tsql,Select,Insert,在SQLServer2008中,我有一个select语句,它在文本输出下面吐出 “text1d”、“text2”、“text3” “text3d”、“text2”、“text6” “text1d”、“text2”、“text6” “text18d”、“text2”、“text3” “文本15”、“文本2”、“文本5” 我想将上述输出插入Test1表 create table Test1 (c1 varchar(20),c2 varchar(20),c3 varchar(20)) 如果有帮

在SQLServer2008中,我有一个select语句,它在文本输出下面吐出

“text1d”、“text2”、“text3”

“text3d”、“text2”、“text6”

“text1d”、“text2”、“text6”

“text18d”、“text2”、“text3”

“文本15”、“文本2”、“文本5”

我想将上述输出插入Test1表

create table Test1  (c1 varchar(20),c2 varchar(20),c3 varchar(20))
如果有帮助的话,我可以修改生成上述输出的select脚本,而不是使用“单引号”和“逗号”


谢谢。

为什么要将这些列合并成一个带分隔符的字符串,以便在插入时再次对其进行解析

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2"
你就不能:

insert into Test1
    (c1, c2, c3)
    <variation of your original select>
插入到Test1中
(c1、c2、c3)

为什么要将这些列合并成一个带分隔符的字符串,以便在插入时再次将其解析出来

你就不能:

insert into Test1
    (c1, c2, c3)
    <variation of your original select>
插入到Test1中
(c1、c2、c3)

不是很优化,但可能工作正常:

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
DECLARE@values VARCHAR(MAX)
声明c\u选择光标快进
挑选
打开c_选择
从c_选择获取下一个到@values
而@@FETCH\u STATUS=0
开始
EXEC('INSERT INTO table2(col1、col2、col3)值(+@VALUES+'))
从c_选择获取下一个到@values
结束
关闭c_选择
取消分配c_选择

不是很优化,但可能工作正常:

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
DECLARE@values VARCHAR(MAX)
声明c\u选择光标快进
挑选
打开c_选择
从c_选择获取下一个到@values
而@@FETCH\u STATUS=0
开始
EXEC('INSERT INTO table2(col1、col2、col3)值(+@VALUES+'))
从c_选择获取下一个到@values
结束
关闭c_选择
取消分配c_选择

您可以使regexp func返回xml。您可以构建这个
text1xt2text3
而不是这个
'text1d'、'text2'、'text3'

下面是一个示例,其中一个表变量模拟了您的查询

设置测试数据

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>')
对Test1的查询会给出这个结果

c1      c2    c3
text1d  text2 text3
text3d  text2 text6
text1d  text2 text6
text18d text2 tex3t
text15  text2 text5
我想这也是这个问题的答案。

您可以使regexp func返回xml。您可以构建这个
text1xt2text3
而不是这个
'text1d'、'text2'、'text3'

下面是一个示例,其中一个表变量模拟了您的查询

设置测试数据

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>')
对Test1的查询会给出这个结果

c1      c2    c3
text1d  text2 text3
text3d  text2 text6
text1d  text2 text6
text18d text2 tex3t
text15  text2 text5
我想这也是这个问题的答案。

你能发布你的
SELECT
语句吗,因为它会使帮助更容易。你能发布你的
SELECT
语句吗,因为我使用的是以文本形式返回字符串的正则表达式。谢谢,因为我使用的是以文本形式返回字符串的正则表达式。谢谢