sql-server - 仅包括不为空的记录的属性
问题描述
来自stackoverflow的亲爱的人
我目前正在研究一种将数据从数据库中导出的机制。每条记录大约有 30 个属性,我只想导出那些确实具有实际值的属性。
如果解释不够准确,这里有一个例子:
+----+-----------+------------+---------+--------+
| ID | Name | Profession | Country | Salary |
+----+-----------+------------+---------+--------+
| 1 | John Doe | NULL | USA | 5000 |
+----+-----------+------------+---------+--------+
| 2 | Jane Doe | Painter | NULL | NULL |
+----+-----------+------------+---------+--------+
| 3 | Jonas Doe | Butcher | England | 8000 |
+----+-----------+------------+---------+--------+
Expected outputs:
John Doe: John Doe, USA, 5000
Jane Doe: Jane Doe, Painter
Jonas Doe: Jonas Doe, Butcher, England, 8000
这些输出应在 XML 文件中生成。
如果可能的话,这应该对数据库中的每条记录都是可能的。我正在寻找一个函数来检查属性是否具有值,并根据该值将其添加到导出文件中。遗憾的是我找不到类似的东西。
编辑:到目前为止,我所做的只是编写查询以获取所有可能的属性:
CREATE PROCEDURE export @id int AS
BEGIN
SELECT Name,Profession,Country,Salary FROM Employee
WHERE ID = @id;
END
GO
解决方案
您可以使用 . 从您想要的表中选择所有内容FOR XML PATH
。
WITH Employee (ID, [Name], Profession, Country, Salary) AS (
SELECT 1, 'John Doe', NULL, 'USA', 5000 UNION ALL
SELECT 2, 'Jane Doe', 'Painter', NULL, NULL UNION ALL
SELECT 3, 'Jonas Doe', 'Butcher', 'England', 8000
)
SELECT *
FROM Employee
FOR XML PATH
会回来
<row>
<ID>1</ID>
<Name>John Doe</Name>
<Country>USA</Country>
<Salary>5000</Salary>
</row>
<row>
<ID>2</ID>
<Name>Jane Doe</Name>
<Profession>Painter</Profession>
</row>
<row>
<ID>3</ID>
<Name>Jonas Doe</Name>
<Profession>Butcher</Profession>
<Country>England</Country>
<Salary>8000</Salary>
</row>
编辑
WITH Employee (ID, [Name], Profession, Country, Salary) AS (
SELECT 1, 'John Doe', NULL, 'USA', 5000 UNION ALL
SELECT 2, 'Jane Doe', 'Painter', NULL, NULL UNION ALL
SELECT 3, 'Jonas Doe', 'Butcher', 'England', 8000
)
SELECT ID, (SELECT * FROM Employee S WHERE S.ID = M.ID FOR XML PATH) [XML]
FROM Employee M
ID
将使用它的XML
数据返回一行。
推荐阅读
- spring - Spring Boot 在使用 requestMatchers() 时也会忽略 logout() 配置
- typescript - Svelte + Typescript = 如何使错误消失?
- javascript - 将javascript新日期值转换为可读字符串
- html - Beautiful Soup 特定的 td 标签?
- excel - Powershell脚本将excel中的过滤数据复制到另一个工作表
- django - django form.as_p 似乎没有理由不再渲染
- ios - 快速滑动时保持 TabBar 大标题
- git - 如何全局禁用 git ident 处理?
- python - 后处理(聚类)对象跟踪结果的算法
- java - 我有一个字符串包含一个重复的单词,例如 72 次,我想将文本拆分为许多字符串,这些字符串包含该单词之间的子字符串