加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 15:57:48 所属栏目:MsSql教程 来源:网络整理
导读: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 ( 800

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读