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。
下面為修改的存儲過程
@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)
則能夠將得到的結果插入到相應的表中
轉載于:https://www.cnblogs.com/jys509/archive/2011/08/10/2133254.html
總結
以上是生活随笔為你收集整理的sql截取字符串并把字符串插入到表中的存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android状态栏隐藏 ( 全屏 )
- 下一篇: [轉]VS2010 SP1 TFS 2