【发布时间】: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