SQL語句 傳自定義表到臨時表

SQL不能傳數組,也不能傳自定義的表。一個變通的辦法是轉換成一定格式的String以後傳。

如輸入String s= @'A,1;B,2'

CREATE PROCEDURE dbo.ShowId
(
@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=CASTSUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndexas 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=CASTSUBSTRING(@subString,@spaceIndex+1,LEN(@subString)-@spaceIndexas int)
    
INSERT INTO #temp VALUES(@keyWord,@value)


Set NoCount OFF
if @@error= 0
begin
    
commit transaction
end
else 
begin
    
rollback transaction
end
select * from #temp

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章