Sql server 插入字符串';将每个值合并到一列中

Sql server 插入字符串';将每个值合并到一列中,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,在这里,我想将完整的字符串每个值插入到一列中。为此,我编写了以下脚本: 示例: EXEC sptest @cola = 'X1', @colb = 'M1,M2,M3,M4', @colc = 'Z1' 表:测试 create table test ( cola varchar(10), colb varchar(max), colc varchar(10) ); 注意:现在我想通过调用存储过程插入如下记录: cola colb colc ------------------ X1

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

示例

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

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
值。我不知道如何在
列colb

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

基本上,您应该这样做:

  • 在while循环中,使用
    CHARINDEX
    确定
    @colb
    中下一个
    的位置。将此位置存储在变量中
  • 使用
    子字符串
    仅检索
    @colb
    中存储到(1)中位置的字符
  • 使用
    @cola
    @colc
    和(2)中提取的值调用
    INSERT
  • 重复此操作,直到在@colc中找不到更多的

  • 问题没有多大意义…@MitchWheat,请检查更新。为什么要使用dynamic?根本不需要基于您发布的内容使用dynamic sql。这不仅是不必要的,而且会使您的过程容易受到sql注入的攻击。您还应该始终在insert语句中命名列。