SQL不能傳數組,也不能傳自定義的表。一個變通的辦法是轉換成一定格式的String以後傳。
如輸入String s= @'A,1;B,2'
(
@inputString varchar(max)
)
AS
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @spaceIndex int
DECLARE @subString varchar(50)
DECLARE @keyWord varchar(50)
DECLARE @value int
Set @PointerPrev=0
set @PointerCurr=0
SET @inputString = 'A,1;B,2'
CREATE TABLE #temp
(
tKeyword varchar(50),
tValue int
)
begin transaction
SET NOCOUNT ON;
truncate table #temp--清空臨時表的所有數據和約束
while(LEN(@inputString)>@PointerCurr)
begin
Set @PointerCurr=CharIndex (';',@inputString ,@PointerPrev+1)
if(@PointerCurr<=0)
break
else
begin
set @subString=SUBSTRING(@inputString,@PointerPrev+1 ,@PointerCurr-@PointerPrev-1)
set @spaceIndex=CharIndex (',',@subString ,1)
set @keyWord=SUBSTRING(@subString,1,@spaceIndex-1)
set @value=CAST( SUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndex) as int)
INSERT INTO #temp VALUES(@keyWord,@value)
set @PointerPrev=@PointerCurr;
end
end
set @subString=SUBSTRING(@inputString,@PointerPrev+1 ,LEN(@inputString)-@PointerPrev)
set @spaceIndex=CharIndex (',',@subString ,1)
set @keyWord=SUBSTRING(@subString,1,@spaceIndex-1)
set @value=CAST( SUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndex) as int)
INSERT INTO #temp VALUES(@keyWord,@value)
Set NoCount OFF
if @@error= 0
begin
commit transaction
end
else
begin
rollback transaction
end