字符串示例: user_oid=$124;A1=1;A2=2;branch_no=1400;
/*
创建字段处理函数
*/
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE FUNCTION F_NODE_21(@val varchar(4000))
RETURNS @ctb TABLE([name] varchar(50),[value] varchar(50))
AS
BEGIN
declare @tmpVal varchar(2000)
declare @name varchar(50)
declare @value varchar(50)
while charindex(';',@val)>0
begin
set @val = substring(@val,CHARINDEX(';',@val)+1,2000)--去掉已经计算过的节点
set @tmpVal = substring(@val,@val)) --得到单个节点的数量 A1=X
set @name=substring(@tmpVal,CHARINDEX('=',@tmpVal))
set @value=substring(@tmpVal,@tmpVal)+1,10)
if len(@name)>0 and len(@value)>0
begin
insert @ctb
SELECT @name as name,@value as value
end
end
RETURN
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*
创建插入节点表的存储过程
*/
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE procedure sp_insert_node_21
@content varchar(4000)
as
declare @num int
declare @val varchar(4000)
declare @tmpVal varchar(4000)
declare @user_oid varchar(200)
declare @sqlStr varchar(4000)
if @content <> ''
set @val=@content
set @tmpVal = substring(@val,@val)) --得到单个节点的数量 A1=X
set @user_oid=substring(@tmpVal,len(@tmpVal))
declare @map varchar(2000)
declare @nameStr varchar(2000)
declare @valueStr varchar(2000)
declare @name varchar(200)
declare @value varchar(200)
set @map='';
set @nameStr='';
set @valueStr='';
DECLARE CustomCursor Cursor For (Select name,value From cc_dbo.F_NODE_21(@content))
OPEN CustomCursor
FETCH NEXT FROM CustomCursor INTO @name,@value ;
WHILE @@FETCH_STATUS = 0
BEGIN
if(@name='user_oid' or @name='branch_no' or @name='operate_type')
begin
set @map=@map+@name+'='''+@value+''',';
set @nameStr=@nameStr+@name+',';
set @valueStr=@valueStr+''''+@value+''',';
end
else
begin
set @map=@map+@name+'='+@value+',';
set @valueStr=@valueStr+@value+',';
end
FETCH NEXT FROM CustomCursor INTO @name,@value ;
END;
CLOSE CustomCursor
DEALLOCATE CustomCursor
if @map is not null
set @map=SubString(@map,len(@map))
if @nameStr is not null
set @nameStr=SubString(@nameStr,len(@nameStr))
if @valueStr is not null
set @valueStr=SubString(@valueStr,len(@valueStr))
begin
select @num = (select count(1) from node_info_test where user_oid=@user_oid )
set @sqlStr='';
if @num > 0
begin
set @sqlStr='update node_info_test set '+ @map +' where user_oid='''+@user_oid+'''';
end
else --新插入一条
begin
set @sqlStr='insert into node_info_test(count_date,user_oid,'+@nameStr+') values (CONVERT(varchar, getDate(),20),'''+@user_oid+''','+@valueStr+')'
end
end
execute(@sqlStr)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。