【问题标题】:SQL Server & XML: how can I get an xml attribute from sql table?SQL Server & XML:如何从 sql 表中获取 xml 属性?
【发布时间】:2020-03-05 20:45:47
【问题描述】:

我有一张这样的桌子:

create table product 
(
    id integer, 
    category varchar(50), 
    quantity integer, 
    techdata varchar(100), 
    cost_price float
);

insert into product 
values (1, 'window', 2, '<Data w="1000" h="1000"/>', 100.56),
       (2, 'door', 1, '<Data w="900" h="1800"/>', 96.12),
       (3, 'window', 20, '<Data w="750" h="300"/>', 152.5),
       (4, 'door', 100, '<Data w="1046" h="2046"/>', 46.74),
       (5, 'window', 1, null, null);

我必须从这些行中选择所有“w”和“h”属性值。我已经尝试过这个解决方案,但它不起作用。

SELECT 
    t.p.value('(@w)[1]', 'VARCHAR(50)') AS width,
    t.p.value('(@h)[1]', 'VARCHAR(50)') AS height
FROM 
    product 
CROSS APPLY 
    techdata.nodes('/Data') t(p)

任何正确解决方案的提示?

【问题讨论】:

  • “它不起作用”不能很好地描述问题。你得到错误或糟糕的结果?你期待什么结果?
  • "XMLDT 方法 'nodes' 只能在 xml 类型的列上调用。" - 这就是我得到的错误。

标签: sql sql-server xml


【解决方案1】:

我认为您的问题是 techdata 列不是 XML 类型。

试试这个

select
    CONVERT(xml, techdata).value('(/Data/@w)[1]', 'int') as Width,
    CONVERT(xml, techdata).value('(/Data/@h)[1]', 'int') as Height
from product

【讨论】:

  • 它有效 - 你是对的,列是 varchar 而不是 xml,所以它必须转换为正确的数据类型。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
相关资源
最近更新 更多