【发布时间】:2021-04-09 10:30:42
【问题描述】:
我正在尝试使用 T-SQL 从 EDMS 文档管理系统中提取一些数据。基本上我需要创建一个报告,列出系统上的所有文档以及每个文档的文件路径。 “docs”表中每个以 docid 为键的文档都有一行。这是一个例子:
| docid | size | ext |
|---|---|---|
| 10001 | 1 | jpg |
| 10002 | 1 | png |
| 10003 | 1 | tif |
| 10004 | 3 | tif |
相关文档的文件名通常是 docid 后跟扩展名,但是由于 tif 扫描形式的文档可以跨越多个单独的文件,因此为 tif 文件添加了后缀,该后缀由下划线后跟部分组成number(大小列表示每次扫描存在多少个部分。)因此对于上面的示例,我需要输出以下内容:
| docid | filepath |
|---|---|
| 10001 | c:\documents\10001.jpg |
| 10002 | c:\documents\10002.png |
| 10003 | c:\documents\10003_1.tif |
| 10004 | c:\documents\10004_1.tif |
| 10004 | c:\documents\10004_2.tif |
| 10004 | c:\documents\10004_3.tif |
我认为它需要以某种方式嵌套在 SELECT 中的 WHILE 循环,但不知道如何实现这一点。
【问题讨论】:
-
size的最大值是多少?此外,WHILE是您想要的最后 项; SQL 是一种基于集合的语言,因此擅长基于集合的解决方案,但不擅长迭代解决方案。 -
为什么 10003 有一个
_1而前两个没有? -
我假设 OP 只想为
tif文件、@GordonLinoff 提供零件号。 -
是的,部件号仅适用于 tif 文件。所以 tif 文件总是有部件号(即使只有一个部件),但其他文件扩展名总是只有一个部件而没有添加后缀。责怪 EDMS 设计者;我不认为我会这样设计...