 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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|