IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[sys_sql_getNextSysVar]') AND type = 'P')
DROP PROCEDURE [dbo].[sys_sql_getNextSysVar]
GO
--如果返回varName 为空，则没有变量
create procedure [dbo].[sys_sql_getNextSysVar](
@exp varchar(2000),--分析表达式
@startInd int,--起始位置
@varType varchar(10) output,--变量类型
@varName varchar(20) output,--变量名称
@frmInd int output,--变量起始位置  :: 开始
@toInd int output--变量结束位置  :: 结束
)
as
begin
declare @i int,@inameb int

select @varName = null,@frmInd=0,@toInd=0

set @i=charindex('::',@exp,@startInd)
if (@i<=0)
goto error;

set @frmInd = @i
set @i=charindex('::',@exp,@frmInd + 2)  --寻找结束标志
if (@i<=0)
goto error

set @toInd = @i+2  --结束标志位置
--分割类型
set @i=charindex(',',@exp,@frmInd + 2) 
if (@i<@frmInd+2)
goto error
select @varType=ltrim(rtrim(substring(@exp, @frmInd + 2,@i - (@frmInd + 2))))
--变量名称
select @inameb = charindex('=',@exp,@i) 
if (@inameb<@i)
goto error

set @varName = ltrim(rtrim(substring(@exp, @inameb + 1,(@toInd - 2) - (@inameb + 1) )))

return 

error:

return 
end