sql擷取字串並把字串插入到表中的儲存過程

2021-09-06 04:16:13 字數 3512 閱讀 8865

問題描述:

我需要向乙個儲存過程傳遞陣列型別的引數,可是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。

下面為修改的儲存過程

create procedure [dbo].[proc_split_sizeclass]

@list varchar(

1000

),--

尺碼@sizeid

int--

尺碼臨時表id

as declare @ix

int, @pos

int, @str varchar(

1000

), @sum

int,@i

intdeclare @size varchar(

2000

) declare @sizeclass varchar(20)

set@size=''

set@i=1

set @pos =1

set @ix =1

while @ix

>

0begin

set @ix

=charindex(',

', @list, @pos)

--charindex裡面分別指(尋找的字元,搜尋指定序列的列,搜尋時的起始字元位置)

if @ix

>

0set @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

asvarchar(

10))

--給size編號成size1,size2,size3等

set@size

=@size

+@sizeclass+'

='+''''

+@str

+''''+'

,'--給編號完size賦值

print @size

--列印出@size

set @pos

=@ix +1

set@i=@i

+1end

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

asvarchar(

10))

exec(@sql)

則能夠將得到的結果插入到相應的表中

sql 擷取字串

sql 擷取字串 a.擷取從字串左邊開始n個字元 declare s1 varchar 100 select s1 select left s1,4 顯示結果 http b.擷取從字串右邊開始n個字元 例如取字元www.163.com declare s1 varchar 100 select s1...

SQL擷取字串

substring 返回字元 binary text 或 image 抒發式的一全體。無關可與當函式一伏運用的無效 microsoft sql server 資料種型的更多疑息,請參睹資料種型。語法 substring expression start length 引數 expression 是字...

SQL擷取字串

substring 返回字元 binary text 或image 表示式的一部分。有關可與該函式一起使用的有效 microsoft sql server 資料型別的更多資訊,請參見資料型別。語法substring expression start length 引數expression 是字串 二...