sqlserver&;XML:如何从sql表中获取XML属性?

sqlserver&;XML:如何从sql表中获取XML属性?,sql,sql-server,xml,Sql,Sql Server,Xml,我有一张这样的桌子: 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),

我有一张这样的桌子:

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);

是否有适当解决方案的提示?

我认为您的问题在于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

我认为您的问题在于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

“它不起作用”不是对问题的好描述。你得到的是错误还是坏结果?您希望得到什么样的结果?“XMLDT方法‘nodes’只能在xml类型的列上调用。”-这就是我得到的错误。“它不工作”不是对问题的良好描述。你得到的是错误还是坏结果?您希望得到什么结果?“XMLDT方法‘nodes’只能在xml类型的列上调用。”-这是我得到的错误。它可以工作-您是对的,列是varchar而不是xml,因此必须将其转换为正确的数据类型。非常感谢!它可以工作——没错,列是varchar而不是xml,所以必须将其转换为正确的数据类型。非常感谢!