我有下面的sql表。我需要xmls
在表中添加一列,使表如下所示。
CREATE TABLE employees(
id integer,
name VARCHAR(MAX),
designation VARCHAR(MAX),
manager integer,
hired_on date,
salary integer,
commission float,
dept integer);
INSERT INTO employees VALUES (1,'JOHNSON','ADMIN',6,'12-17-1990',18000,NULL,4);
INSERT INTO employees VALUES (2,'HARDING','MANAGER',9,'02-02-1998',52000,300,3);
INSERT INTO employees VALUES (3,'TAFT','SALES I',2,'01-02-1996',25000,500,3);
INSERT INTO employees VALUES (4,'HOOVER','SALES I',2,'04-02-1990',27000,NULL,3);
SELECT * FROM employees WHERE id < 10;
新的列 xml 应该如下所示(下面最后一列),我知道我可以在字符串实用程序的帮助下完成它,但无法找出简单但有效且最佳的解决方案。
这是我尝试过的,但这并没有给我结束标签summary
。
SELECT (
SELECT id AS '@id',
designation AS '@type',
salary AS '@salary'
FROM employees b
WHERE b.id = a.id
FOR XML PATH('summary'))
FROM employees a
严格来说,自闭合标签
<summary />
和完整标签<summary></summary>
在 XML 中具有相同的含义,因此对于您或任何适当的 XML 解析器来说,它们应该没有什么区别。但是,如果您想强制它生成完整标签而不是自关闭标签,您可以添加一个空
text()
列:数据库<>小提琴
子查询中不需要自连接,可以直接引用外层列。另请注意,您应该
[]
在必要时使用引用列,而不是''
.旁注:您不需要存储此 XML,您可以创建一个视图,在查询时将其显示出来。
我建议根本不要这样做。
XML 中的所有数据值都存在于记录内的其他字段中,这使得 XML 成为派生字段。
一般规则:不要存储可以从其他数据派生的数据。
相反,“按需”在查询、视图或计算列中构建 XML。
最简单的情况(尽管如果 XML 有意义的字符没有正确转义,很可能会被破坏):
并且,正如其他人所说,
<summary></summary>
和<summary/>
在 XML 中是完全等价的。(对于 [X]HTML?也许不是,但是对于 XML 本身?是的)。