2010-09-23 97 views
0

我想编写一个查询XML文件的存储过程,在输入特定的字符串模式后查找。TSQL存储过程和XQuery?

我已经卡住了输入参数,请考虑以下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”是输入字符串,并且是真的,然后需要放在表中。但是,“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 

,如果我做太与上表中,或者在操作的情况/ 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>

这个解决方案足以让人觉得这种方法不太合适。

+0

其实你是对的,我的xml文件的结构也像你的建议,我只是错过了把它放在这里,所以我会尽快编辑它。 – SvenB 2010-09-23 18:12:45