在输入要查找的特定字符串模式后,我想编写一个查询XML文件的存储过程。
我已经停留在输入参数上,请考虑以下XML文档。
<root>
<container>
<element>A</element>
<option>1</option>
</container>
<container>
<element>B</element>
<option>-1</option>
</container>
<container>
<element>C</element>
</container>
</root>
我想要实现的是找到并输出将element-tag和option-tag组合到表中的特定模式。
例如:EXEC搜索“A1,B-1,C”是输入字符串,它将为true,然后需要将其放入表中。但“A,B,C”将是错误的。
我对TSQL不太好,所以我不知道如何分割或排列搜索模式,以便我可以使用它来处理element-tag和option-tag并将它们放入变量或如此。
编辑:我认为下面的代码正朝着正确的方向发展,但我还有另外一个大问题。 我需要用相应的表来分析模式的每个值。我最好举一个例子:输入是“A1,B-1,C”btw输入长度应该是灵活的。
在我现有的表中,我有4列,其中包含以下数据:
ID| Value | Meaning | Info
1 | A | text | text
2 | A-1 | text | text
3 | A1 | text | text
4 | B | text | text
5 | B-1 | text | text
依旧......
现在我需要用值检查每个输入字符串,并将带有“含义”和“信息”列的输入字符串输出到另一个表。
通过上面的例子,我必须找到“A1,B-1,C”的序列,然后将上表中相应的文本(包括字符串)输出到新表中。 所以它看起来像这样:
| Value | Meaning | Info
| A1 | text | text
| B-1 | text | text
| C | text | text
我不知道我是否使上述表太复杂,或者程序中的CASE / IF-ELSE结构是否会更好。
有谁知道如何实现这一目标?
答案 0 :(得分:0)
看起来好像你正在使用错误的工具来完成工作,但如果这些工具非常严格,那么你可以使用以下工具,例如:
drop table #xml
drop table #queryparams
declare @x xml
select @x = '<code><root><items><element>A</element><option>1</option></items><items><element>B</element><option>-1</option></items><items><element>C</element></items></root></code>'
create table #xml (element varchar(60), [option] int null)
insert into #xml
select code.item.value('(element)[1]', 'varchar(60)'),
code.item.value('(option)[1]', 'int')
from
@x.nodes('/code/root/items') AS code(item)
declare @queryParam varchar(60)
select @queryParam = 'A1,B-1,C'
create table #queryparams (element varchar(60), [option] int null)
insert into #queryparams
select left(data,1), RIGHT(data, len(data)-1)
from dbo.split(@queryParam,',')
if not exists (
select *
from #xml x
left join #queryparams q
on x.element = q.element
where q.[option] is null
)
select 1
else
select 0
正如 marc_s 建议您最好使用公共标记内的<element>
和<option>
标记。在这种情况下,我选择了命名不佳的<items>
。
这个解决方案非常讨厌,不足以暗示这种方法不太合适。