
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] 举报,一经查实,本站将立刻删除。