Sql server 在单个查询中将VARCHAR(max)列转换为大写,然后转换为XML

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()时,查询运行时不会出错。) 以“

我尝试在StackOverflow中搜索,但没有成功

我想在
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)