微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver利用sp_oa系列存储过程调用xml+xsl eval输出运算结果的一个例子

CREATE   FUNCTION  getEval( @s   VARCHAR ( 100 ))

RETURNS   VARCHAR ( 100 )

AS

BEGIN


DECLARE   @xmlDoc   INT , @xslDoc   INT , @err   INT , @outValue   INT , @outStr   VARCHAR ( 100 )

DECLARE   @str   VARCHAR ( 1000 ), @xsl   VARCHAR ( 8000 )

SET   @str = ' <?xml version="1.0" encoding="utf-8"?>

<?xml-stylesheet type="text/xsl" href="test.xsl"?>

<root>
' + @s + ' </root> '


SET   @xsl = ' <?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<xsl:script>

function eVal(node)

{

  return eval(node.selectSingleNode("//root").text);

}

</xsl:script>

<xsl:eval>eVal(this)</xsl:eval>

</xsl:template>

</xsl:stylesheet>
'


-- SELECT @str,@xsl

EXEC   @err = sp_OACreate  ' Msxml2.DOMDocument.3.0 ' , @xmlDoc  OUT

EXEC   @err = sp_OASetProperty  @xmlDoc , ' async ' , ' false '

EXEC   @err = sp_OAMethod  @xmlDoc , ' LoadXML ' , @outValue  OUT, @str

EXEC   @err = sp_OACreate  ' Msxml2.DOMDocument.3.0 ' , @xslDoc  OUT

EXEC   @err = sp_OASetProperty  @xslDoc , ' false '

EXEC   @err = sp_OASetProperty  @xmlDoc , ' resolveExternals ' , ' false '

EXEC   @err = sp_OAMethod  @xslDoc , @xsl

EXEC   @err = sp_OAMethod  @xmlDoc , ' transformNode ' , @outStr  OUT, @XslDoc

EXEC   @err = sp_OADestroy  @xmlDoc

EXEC   @err = sp_OADestroy  @xslDoc


RETURN   @outStr

END


GO



CREATE   TABLE  tb(id  INT   IDENTITY ( 1 , 1 ),v  VARCHAR ( 1000 ))

GO

INSERT  tb  SELECT   ' 1*2+3 '

UNION   ALL   SELECT   ' 2+3*5 '

UNION   ALL   SELECT   ' (2+3)*5 '

GO


SELECT  id,v,dbo.getEval(v)  FROM  tb

GO
/*1 1*2+3 5 
2 2+3*5 17 
3 (2+3)*5 25  */



DROP   TABLE  tb

GO


DROP   FUNCTION  getEval

GO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐