在SQL Server中不使用html解码从xml节点获取值

在SQL Server中不使用html解码从xml节点获取值,sql,sql-server,xml,sql-server-2008,xquery,Sql,Sql Server,Xml,Sql Server 2008,Xquery,以上代码给出的值为 DECLARE @P1 xml SET @P1='<Root><Data>&lt;script&gt;function abc(){}&lt;script&gt;</Data></Root>' SELECT @P1 SELECT @P1.value('(/Root/Data)[1]', 'varchar(max)') i、 e html解码。但是如果没有html解码,我如何获得值呢。有没有办

以上代码给出的值为

DECLARE @P1 xml
SET @P1='<Root><Data>&lt;script&gt;function abc(){}&lt;script&gt;</Data></Root>'
SELECT @P1

SELECT @P1.value('(/Root/Data)[1]', 'varchar(max)') 

i、 e html解码。但是如果没有html解码,我如何获得值呢。有没有办法获取节点元素内的实际值?

您可以获取元素值,而无需使用查询方法替换实体引用,然后将XML文本节点强制转换为varchar:

<script>function abc(){}<script>
SELECT CAST(@P1.query('(/Root/Data)[1]/text()') AS varchar(MAX));