SQL傳參Map

思路:用varchar字符串進行傳參,用“,”分割屬性,用“;”分割個數,用SQL的臨時表封裝

代碼:

declare @mapStr varchar(max) --key,val;key2,val2;

建立臨時表:

if OBJECT_ID('tempdb..#tempTable') is not null drop table #tempTable
		   create table #tempTable(
			   id          int identity(1,1) not null,
			   key         varchar(32),
			   val         numeric(10, 4)
		   )	

核心代碼:

declare @str varchar(32)
      while CHARINDEX(';',@mapStr)>0
      begin
           set @str = SUBSTRING(@mapStr,0,CHARINDEX(';',@mapStr));
           declare @key varchar(10),@value varchar(32);
           set @key = SUBSTRING(@str,0,CHARINDEX(',',@str));
           set @value = SUBSTRING(@str,CHARINDEX(',',@str)+1,LEN(@str));
           insert #tempTable(key,val) select @key,@value;
           set @skuQty = SUBSTRING(@mapStr,CHARINDEX(';',@mapStr)+1,LEN(@mapStr));
      end
      if @skuQty<>''
      begin
           declare @key2 varchar(32),@value2 numeric(10, 4);
           set @key2 = SUBSTRING(@mapStr,0,CHARINDEX(',',@mapStr));
           set @value2 = RTRIM(LTRIM(SUBSTRING(@mapStr,CHARINDEX(',',@mapStr)+1,LEN(@mapStr))));
           insert #tempTable(key,val) select @key2,@value2;
      end

 

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