【问题标题】:How to parse a text attribute into a xml atribute in SQL server 2005?如何在 SQL Server 2005 中将文本属性解析为 xml 属性?
【发布时间】:2013-03-05 16:47:18
【问题描述】:

我有一个表,其中包含一个名为 custom_fields 的属性,该属性存储了格式正确的 xml:

<Root>
   ...
   <TotalMontoSoles></TotalMontoSoles>
   ...
</Root>

但是这个属性不存储为 xml 数据类型,而是存储为文本。我需要做的是设置 TotalMontoSoles 值,我试图通过使用 XML-DML 中的 modify 方法来实现这一点,但我一直得到一个

错误 SQL:不允许从数据类型 xml 到文本的显式转换。

当我尝试将列转换为 xml 类型时出错:

DECLARE @custom_fields xml
SET @custom_fields = (SELECT CAST(custom_fields as XML) FROM UPLOAD_HEADER_TEMPORAL
@custom_fields.modify('...')

我做错了什么?有没有其他方法可以做到这一点?

更新:

也许重要的是要指出我在这里要做的是创建一个过程,而我在编译期间遇到了这个错误。

【问题讨论】:

  • 看起来您对 xml 的强制转换是失败的地方。错误消息告诉您问题所在。您的 Text 列无法神奇地转换为 xml。
  • 在这种情况下,我应该如何着手发现问题?我不认为这不是一个格式良好的 xml,因为我已经将该 xml 投射到 sql 之外(特别是在 Java 中)
  • @NickDeVore 此外,我正在创建一个过程,因此 sql 甚至不知道 xml 的样子。这是编译时错误。

标签: sql xml sql-server-2005


【解决方案1】:

文本列数据类型无法转换(转换)为 XML。您可以(应该)使用其中一种 varchar 类型。 Microsoft 将在未来某个时候删除文本(和图像)数据类型。

http://msdn.microsoft.com/en-us/library/ms187993%28v=sql.90%29.aspx

ntext、text 和 image 数据类型将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

【讨论】:

  • 我所做的是先将列转换为 varchar,然后再将其转换为 XML。它似乎运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多