Sql server 2008 从存储在数据库中的xml值中提取内容所需的T-SQL脚本

Sql server 2008 从存储在数据库中的xml值中提取内容所需的T-SQL脚本,sql-server-2008,Sql Server 2008,数据库中存储的值采用以下格式 <xsl:output method="text" /> <xsl:template match="/"> Please verify the username: ... </xsl:template> 请验证用户名:。。。 我需要使用SQL Server 2008提取文本“请验证用户名:…”,即标记内的文本。请帮助如果这是有效且格式良好的Xml,您可以使用Xml功能和数据类型来实现,但由于它的格

数据库中存储的值采用以下格式

<xsl:output method="text" />
    <xsl:template match="/">
      Please verify the username: ...
    </xsl:template>

请验证用户名:。。。

我需要使用SQL Server 2008提取文本“请验证用户名:…”,即
标记内的文本。请帮助

如果这是有效且格式良好的Xml,您可以使用Xml功能和数据类型来实现,但由于它的格式仅为片段,因此我将使用基本的字符串函数

我有三种方法可以做到这一点。这里有一个过于基本的方法。它只使用您已有的关于文本、Xml标记和一些字符串函数的知识

下面代码的输出是“请验证用户名:…”或您在这些标记中放置的任何内容

再次;这不是最优雅的,但它确实适合你所描述的

--string to search
DECLARE @xml AS nvarchar(500) = N'
<xsl:output method="text" />
<xsl:template match="/">
  Please verify the username: ...
</xsl:template>'

--SELECT @xml
DECLARE @startTag AS varchar(50) = '%<xsl:template match="/">%'
DECLARE @endTag AS varchar(50) = '%</xsl:template>%'

/* you can now find the to start and end positions for the tags and parse it out*/
DECLARE @parsedContent AS varchar(250)
SET @parsedContent = REPLACE(REPLACE(SUBSTRING(@xml,PATINDEX(@startTag, @xml),   (PATINDEX(@endTag, @xml) + 15)),'<xsl:template match="/">',''),'</xsl:template>','')

SELECT @parsedContent
--要搜索的字符串
将@xml声明为nvarchar(500)=N'
请验证用户名:。。。
'
--选择@xml
将@startTag声明为varchar(50)='%%'
将@endTag声明为varchar(50)='%%'
/*现在,您可以找到标记的开始和结束位置,并将其解析出来*/
将@parsedContent声明为varchar(250)
SET@parsedContent=REPLACE(REPLACE(子字符串(@xml,PATINDEX(@startTag,@xml),(PATINDEX(@endTag,@xml)+15)),'','','')
选择@parsedContent