2013-07-03 66 views
0

好了,所以我敢肯定,我將不得不使用從OPENXML產生的EDGE表。只是想檢查沒有更好的方法。SQL服務器2008 R2 - 粉碎XML未知模式

這是XML我從一個HTTP API拉動直接進入使用OA和MSXML SQL。我編寫了導入存儲過程,並將XML作爲XML數據類型存儲在一個表中。這是調查響應數據,並且由於每個調查都是不同的,並且隨着時間的推移,響應的元素/列未知。他們提供了調查的元數據,並讓我朝着架構的方式約70%,但也有在沒有在其元數據中存在的響應元素名稱。我認爲他們會向調查生成器添加更多功能,但會在更多對象中添加更多功能,而不會考慮其API中的功能。

所以基本上在現實中

<xml> 
    <response> 
    <ResponseID>1</ReponseID> 
    <Question1>Yes</Question1> 
    <Question1_1_tag1>99</Question1> 
    </response> 
</xml> 
  • 響應包含了很多元素,如果調查問卷有100個問題,也將是對

至少100個元素這樣我就可以得到ResponseID而問題1從他們的元數據,但我將需要粉碎Question1_tag1到任何給定的調查一列,他們不提供XSD和Question1_tag1在其元數據無處存在,但它絕對是我需要捕獲的數據和THI在不同調查的每個結果集中發生了不同的結果,我需要將其名稱作爲列,並確定正確的數據類型。

只是一個說明,我進入了這裏的業務邏輯,因爲在我看過的所有內容中,研究這個問題似乎非常罕見,通常當你遇到這個問題時,它就是獲取需求並獲得格式化好的數據的問題,我想解釋一下,在這種情況下,我真的不能。

所以,再一次肯定我必須編寫定製的T-SQL切碎使用邊緣表的XML。只是好奇,如果有人可以想出更好的方法。

回答

0

我不認爲這是可能的SQL做不做出巨大的字符串操作,以收集模式,然後使用動態SQL來提取數據。 如果你可以改變XML架構將低於通用的東西,那麼從SQL解析將是一塊蛋糕:
選項1:

<xml> 
    <response ResponseID="1"> 
     <Question QuestionID="1" QuestionTagID="1" ResponseValue="Yes" QuestionTagValue="99" /> 
     <Question QuestionID="2" QuestionTagID="3" ResponseValue="Perhaps" QuestionTagValue="91" /> 
    </response> 
</xml> 

選項2:

<xml> 
    <Response ID="1"> 
     <Question ID="1"> 
      <ResponseValue>Yes</ResponseValue> 
      <QuestionTagID>1</QuestionTagID> 
      <QuestionTagValue>1</QuestionTagValue> 
     </Question> 
     <Question ID="2"> 
      <ResponseValue>Perhaps</ResponseValue> 
      <QuestionTagID>3</QuestionTagID> 
      <QuestionTagValue>1</QuestionTagValue> 
     </Question> 
    </Response> 
</xml> 
+0

是啊,我都沒有通過xml控制它來自API的一種方式。 – user1634175

相關問題