2014-12-02 53 views
-1

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

:测试

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('''[email protected]+''','''[email protected]+''','''[email protected]+''')'; 
    PRINT(@dynamic) 
    EXEC(@dynamic) 

GO 

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

调用功能

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

:在调用函数如上图所示在上表中的值colb必须插入。我没有得到如何在column colb中插入每个值的完整字符串。

+0

问题没有多大意义..... – 2014-12-02 13:18:23

+0

@MitchWheat,请检查更新。 – MAK 2014-12-02 13:19:10

+0

你为什么用这个动态?根据您发布的内容,根本不需要动态sql。这不仅是没有必要的,而且它打开了你的程序易受sql注入攻击。您还应始终在插入语句中为您的列命名。 – 2014-12-02 14:35:08

回答

1

SQL没有任何机制来自动分裂逗号分隔值的字符串(您@colb -variable到多个刀片。你需要编写一些代码来自己做这种分裂。

基本上,你应该做这样的事情:

  1. 在while循环,使用CHARINDEX确定@colb下一个,的位置存储在一个变量这个位置
  2. 使用SUBSTRING重。只处理从@colb到(1)中存储的位置的字符。
  3. 拨打INSERT@cola,@colc和您在(2)中提取的值。
  4. 重复,直到在@colc中找不到,
相关问题