【问题标题】:Insert string's each values into a single column将字符串的每个值插入单个列
【发布时间】:2014-12-02 13:16:39
【问题描述】:

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

示例

表格:测试

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 中插入完整的字符串每个值。

【问题讨论】:

  • 问题没有多大意义.....
  • @MitchWheat,请检查更新。
  • 你为什么要使用动态?根据您发布的内容,根本不需要动态 sql。这不仅没有必要,而且会使您的程序容易受到 sql 注入的影响。您还应该始终在插入语句中命名您的列。

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


【解决方案1】:

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

基本上,你应该这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多