思路:用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