将字符串的每个值插入一列

时间:2014-12-02 13:16:40

标签: sql-server sql-server-2008-r2

这里我想将每个值的完整字符串插入一列。为此,我编写了以下脚本:

示例

:测试

create table test
(
cola varchar(10),
colb varchar(max),
colc varchar(10)
);

注意:现在我想通过调用存储过程插入如下记录:

cola   colb   colc
------------------
X1     M1     Z1
X1     M2     Z1
X1     M3     Z1
X1     M4     Z1

存储过程:sptest

CREATE PROC sptest
@cola varchar(10),
@colb varchar(max),
@colc varchar(10)

AS

Declare @dynamic varchar(max)

    SET @dynamic =N'delete from test where colc='''+ @colc +'''';
    PRINT(@dynamic)
    EXEC(@dynamic)

    SET @dynamic =N'insert into test values('''+@cola+''','''+@colb+''','''+@colc+''')';
    PRINT(@dynamic)
    EXEC(@dynamic)

GO

注意:首先,我需要通过检查colc值来删除记录,然后插入记录。

调用函数

EXEC sptest
@cola = 'X1',
@colb = 'M1,M2,M3,M4',
@colc = 'Z1'

注意:在上面显示的调用函数中,必须插入colb值,如上表所示。我没有得到如何在column colb

中插入每个值的完整字符串

1 个答案:

答案 0 :(得分:1)

SQL没有任何机制可以自动将逗号分隔值字符串(您的@colb - 变量)拆分为多个插入。您需要编写一些代码来自行拆分。

基本上,你应该这样做:

  1. 在while循环中,使用CHARINDEX确定,中下一个@colb的位置。将此位置存储在变量中。
  2. 使用SUBSTRING仅检索从@colb到(1)中存储的位置的字符。
  3. 使用INSERT@cola和您在(2)中提取的值调用@colc
  4. 重复直到@colc中找不到,