問題描述:
我需要向乙個儲存過程傳遞陣列型別的引數,可是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 是字串 二...