Sql server 在单个查询中将VARCHAR(max)列转换为大写,然后转换为XML
我尝试在StackOverflow中搜索,但没有成功 我想在Sql server 在单个查询中将VARCHAR(max)列转换为大写,然后转换为XML,sql-server,tsql,Sql Server,Tsql,我尝试在StackOverflow中搜索,但没有成功 我想在VARCHAR(max)列上执行以下两个转换,但只在一个查询中执行。这是T-SQL 使用UPPER()函数将列中的所有文本转换为大写 使用CAST(列为XML)函数将列转换为XML数据类型 我在下面试过,但语法不正确 SELECT CAST(UPPER(inputText) AS XML) AS ConvertedText FROM SampleTable SSMS返回的错误。(当我删除UPPER()时,查询运行时不会出错。) 以“
VARCHAR(max)
列上执行以下两个转换,但只在一个查询中执行。这是T-SQL
UPPER()
函数将列中的所有文本转换为大写CAST(列为XML)
函数将列转换为XML
数据类型SELECT CAST(UPPER(inputText) AS XML) AS ConvertedText
FROM SampleTable
SSMS返回的错误。(当我删除UPPER()时,查询运行时不会出错。)
以“xml”开头的名称空间是保留的
XML严格区分大小写。使用字符串方法处理XML总是很危险的。因为XML不仅仅是一个包含一些额外的字符串 您的XML是—我从发布的错误消息中获取—包括一个XML声明。此外,我还将讨论名称空间。XML需要XML声明和名称空间声明(小写)。这不能是大写的 检查一下:我定义了一个带有声明、默认名称空间和多个前缀名称空间的XML
DECLARE @testXML NVARCHAR(MAX)=
N'<?xml version="1.0" encoding="UTF-16"?>
<root xmlns="dummy.default" xmlns:blah="Some.blah.namespace">
<test a="attribute value">element value</test>
<blah:NamespacedElement>value in a namespaced element</blah:NamespacedElement>
</root>';
SELECT UPPER(@testXML);
/*
<?XML VERSION="1" ENCODING="UTF-16"?>
<ROOT XMLNS="DUMMY.DEFAULT" XMLNS:BLAH="SOME.BLAH.NAMESPACE">
<TEST A="ATTRIBUTE VALUE">ELEMENT VALUE</TEST>
<BLAH:NAMESPACEDELEMENT>VALUE IN A NAMESPACED ELEMENT</BLAH:NAMESPACEDELEMENT>
</ROOT>
*/
--您可以看到,声明已经消失,xmlns
现在是小写。这可以转换为XML:
SELECT CAST(SUBSTRING(REPLACE(UPPER(@testXML),'xmlns','xmlns'),PATINDEX('%?>%',@testXML)+2,1000000) AS XML)
但是——老实说——如果这不仅仅是一个奇怪的家庭作业,那么就不应该改变整个事情的XML大小写(包括标记) 这很好
选择CAST(大写('inputText')作为XML)作为ConvertedText
-错误消息的确切内容和完整内容是什么?(如果您指的是错误,请始终包含错误消息)更新问题以包含错误消息您可以提供一些示例数据和预期结果吗?您完全正确。xml声明在转换为大写时引发错误。不幸的是,我被交给了这个xml文本列,元素中的大小写混合在一起,因此在执行永久解决方案之前,我别无选择。很好的解释!
SELECT CAST(SUBSTRING(REPLACE(UPPER(@testXML),'xmlns','xmlns'),PATINDEX('%?>%',@testXML)+2,1000000) AS XML)