2010-09-23 164 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