zoukankan      html  css  js  c++  java
  • sql截取字符串并把字符串插入到表中的存储过程

    问题描述:
        我需要向一个存储过程传递数组类型的参数,可是Transact-SQL里面没有数组类型,请问应该怎样实现数组的功能?

    问题分析:
        SQL Server并没有数组类型,ANSI SQL-92标准中并没有任何有关数组方面的定义。要实现其他高级语言中的数组的功能,我们必须使用一些特殊的处理方法,其中包括特殊设计的字符参数、临时表、XML等。
        示例代码如下:
    CREATE PROCEDURE sum_of_array @list varchar(1000)
    AS
    DECLARE @ix int, @pos int, @str varchar(1000), @sum int
    SET @pos = 1
    SET @ix = 1
    SET @sum = 0
    WHILE @ix > 0
    BEGIN
    SET @ix = charindex(',', @list, @pos)
    IF @ix > 0
    SET @str = substring(@list, @pos, @ix - @pos)
    ELSE
    SET @str = substring(@list, @pos, len(@list))
    SET @str = ltrim(rtrim(@str))
    SET @sum = @sum + cast(@str AS int)
    SET @pos = @ix + 1
    END
    SELECT @sum
    GO
        该示例代码可以求出一个整型数据数组的和,调用方式为:
    EXEC sum_of_array @list = '1,2,3,4,5'
        结果为:16。


    下面为修改的存储过程

    View Code
    create PROCEDURE [dbo].[Proc_Split_SizeClass]
    @list varchar(
    1000),--尺码
    @SizeID
    int --尺码临时表ID
    AS
    DECLARE @ix
    int, @pos int, @str varchar(1000), @sum int,@i int
    declare @Size varchar(
    2000)
    declare @SizeClass varchar(
    20)
    set @Size=''
    set @i=1
    SET @pos
    = 1
    SET @ix
    = 1
    WHILE @ix
    > 0
    BEGIN
    SET @ix
    = charindex(',', @list, @pos) -- charindex里面分别指(寻找的字符,搜索指定序列的列,搜索时的起始字符位置)
    IF @ix
    > 0
    SET @str
    = substring(@list, @pos, @ix - @pos)
    ELSE
    SET @str
    = substring(@list, @pos, len(@list))
    SET @str
    = ltrim(rtrim(@str))--LTRIM 是删除起始空格后返回字符表达式,RTRIM 是截断所有尾随空格后返回一个字符串
    set @SizeClass='Size'+cast(@i as varchar(10))--给Size编号成Size1,Size2,Size3等
    set @Size=@Size+@SizeClass+'='+''''+@str+''''+','--给编号完Size赋值
    print @Size
    --打印出@Size
    SET @pos
    = @ix + 1
    set @i=@i+1
    END
    set @Size=left(@Size,len(@Size)-1)--去掉字符串最后的一个字符
    print @Size
    --打印出最终的字符串

    执行:exec Proc_Split_SizeClass
    '160,165,170,175,180,185,190','2'
    结果为:
    Size1
    ='160',
    Size1
    ='160',Size2='165',
    Size1
    ='160',Size2='165',Size3='170',
    Size1
    ='160',Size2='165',Size3='170',Size4='175',
    Size1
    ='160',Size2='165',Size3='170',Size4='175',Size5='180',
    Size1
    ='160',Size2='165',Size3='170',Size4='175',Size5='180',Size6='185',
    Size1
    ='160',Size2='165',Size3='170',Size4='175',Size5='180',Size6='185',Size7='190',
    Size1
    ='160',Size2='165',Size3='170',Size4='175',Size5='180',Size6='185',Size7='190'

    另外,在存储过程最后加上代码:
    declare @sql varchar (
    2000)
    set @sql=''
    set @sql='update Pre_BaseProductSize set '+@Size+' where SizeID='+cast(@SizeID as varchar(10))
    exec(@sql)

    则能够将得到的结果插入到相应的表中
  • 相关阅读:
    mysql常见的优化方法
    Mac 怎么通过自带终端连接linux服务器
    基于 appium 的 UI 自动化测试
    sourcetree在mac上的使用
    mac下git安装和使用
    mac 上更改环境变量
    Mac环境下svn的使用
    jira常用配置
    influxDB基本操作
    Collectd 和 InfluxDB 的部署和使用
  • 原文地址:https://www.cnblogs.com/jys509/p/2133254.html
Copyright © 2011-2022 走看看