sql截取字符串并把字符串插入到表中的存储过程
2011-08-10 09:26
465 查看
问题描述:
我需要向一个存储过程传递数组类型的参数,可是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
我需要向一个存储过程传递数组类型的参数,可是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) 则能够将得到的结果插入到相应的表中
相关文章推荐
- 【Sql】—存储过程中截取字符串
- sql将以|间隔的字符串循环插入数据库中的存储过程案例
- 关于 字符串中的单引号, 在sql存储过程中的传输总结; 逗号分隔的多个变量提取方法.
- AAA如何插入几十万条数据 PL/SQL 调试存储过程简单实例
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
- 用于执行(计算) "字符串表达式" 的 T-SQL 存储过程
- 存储过程中执行sql字符串,给存储过程的变量赋值
- SQL开发应用实例存储过程——各种字符串分拆处理函数
- Hibernate 使用原生SQL 预编译过程中,插入字符串遇到SQL字符串错误
- 存储过程的字符串变态截取
- SQL存储过程基于字段名传入的字符串拼接.
- 字符串缓存实现的通用分页存储过程.sql
- SQL 分割字符串和通用分页查询存储过程
- SQL将存储过程的结果插入到临时表
- 在存储过程中连接SQL语句字符串
- sql在所有存储过程中查询包含某字符串的执行语句
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- 输入表名生成插入、更新存储过程和调用该存储过程的字符串
- Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用
- MYSQL存储过程执行用字符串拼成的sql语句