【发布时间】:2019-12-17 16:04:28
【问题描述】:
我有一个盒子内盒子的数据库。最大嵌套深度为 10,因此每个框最多可以有 9 个父位置或子位置。一个字段包含每个框的层次结构 - 即对于位于 ABC 内的框 DEF:
SELECT hierarchy from INVENTORY WHERE boxname = 'DEF' 返回“ABC -> DEF”。
我现在需要允许用户重命名框。我正在尝试使用 SQL 的 REPLACE 函数来完成此操作,但据我所知,它不能在子字符串上工作。我试过了:
update inventory
set hierarchy = replace(hierarchy, 'DEF', 'XYZ')
这不会像我期望的那样将层次结构更新为“ABC -> XYZ”
我希望把它当成一个“Ctrl+F查找和替换”的功能,但是好像不能做到以下几点:
- 查找包含字符串的所有字段,包括子字符串。
- 替换给定记录的所有字段中的所有匹配项。
有人知道这两种方法是否真的可行吗?
我正在使用 TSQL。
按要求提供样本数据:
输入:
| name | parent1 | parent2 | ... | hierarchy |
| --- | --- | --- | --- | --- |
| DEF | ABC | | | ABC -> DEF |
| JKL | DEF | ABC | | ABC -> DEF -> JKL |
输出:
| name | parent1 | parent2 | ... | hierarchy |
| --- | --- | --- | --- | --- |
| XYZ | ABC | | | ABC -> XYZ |
| JKL | XYZ | ABC | | ABC -> XYZ -> JKL |
【问题讨论】:
-
请提供样本数据和期望的结果。
-
已添加,如果您需要更多信息,请告诉我
-
这太复杂了。我自己想办法。
-
太复杂了?查看 SQL Fiddle,他们有一个很好的小链接,他们称之为 Text to DDL - 您可以在其中粘贴文本,他们会为您创建 DDL 和 DML。当然,您始终可以在 SSMS 中选择
script table as...。至少,我们需要知道hierarchy列的数据类型。