2014-11-05 98 views
0

我可以使用XML文件將數據正確地插入到表中,但沒有我想知道是否可以使用XML文件更新列。 我有這樣的插入,它的工作原理:使用XML文件更新SQL Server列

IF @LAST_Question <> @QuestionText 
BEGIN 
    insert into [TempDataBase].[dbo].TestQuestion (QuestionType, Question_Text, Questionaire_ID, Filter) 
    VALUES (@QuestionType, @QuestionText, @Questionaire_ID,@Filter) 

    select @newQuestion_ID = SCOPE_IDENTITY() 
END 

INSERT INTO [TempDataBase].[dbo].TestPossible(Q_ID, Expl, Rev, P_A_T, QType) 
VALUES (@newQuestion_ID, @RequiresExplanation, @ReviewRequired, @Value, @QuestionType) 

SET @LAST_Question = @QuestionText 

但是當我嘗試和更新,只需要把最後一個值的XML

UPDATE [TempDataBase].[dbo].TestPossible 
SET Expl = @RequiresExplanation, 
    Rev = @ReviewRequired, 
    P_A_T = @Value, 
    QType = @QuestionType 
WHERE Q_ID = @ID 

現在我有一個光標定義及其他語句來使插入和更新運行,所以沒有必要建議我添加這些語句,我沒有添加它們來保存頁面上的擁塞。如果需要,我可以顯示XML。最主要的是我有多個@Value,它只在第一個問題中插入所需的次數(兩個用於第一個問題,三個用於第二個)

有沒有人有建議來完成這個?

編輯:添加XML

<Questions> 
    <Question> 
     <ID>2422</ID> 
     <QuestionText>Did the Update Work correctly?</QuestionText> 
     <QuestionType>1</QuestionType> 
     <QuestionaireID>2</QuestionaireID> 
     <Filter>31</Filter> 
     <PossibleAnswers> 
       <PossibleAnswer> 
        <Value>yes it did</Value> 
        <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</ReviewRequire> 
       </PossibleAnswer> 
       <PossibleAnswer> 
        <Value>no it did not</Value> 
         <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</ReviewRequire> 
       </PossibleAnswer> 
     </PossibleAnswers> 
    </Question> 
    <Question> 
     <ID>2423</ID> 
     <QuestionText>How are you today?</QuestionText> 
     <QuestionType>1</QuestionType> 
     <QuestionaireID>2</QuestionaireID> 
     <Filter>127</Filter> 
     <PossibleAnswers> 
       <PossibleAnswer> 
        <Value>Great</Value> 
         <RequiresExplanation></RequiresExplanation> 
        <ReviewRequire></ReviewRequire> 
       </PossibleAnswer> 
       <PossibleAnswer> 
        <Value>Good</Value> 
         <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</ReviewRequire> 
       </PossibleAnswer> 
       <PossibleAnswer> 
        <Value>Bad</Value> 
         <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</ReviewRequire> 
       </PossibleAnswer> 
     </PossibleAnswers> 
    </Question> 
</Questions> 

,這裏是我應得的XML數據

DECLARE @XmlString as XML 

select @XmlString = cast(x as XML) 
from openrowset(bulk 'C:\xml_ID.xml',single_blob) as T(x) 

--SET UP A CURSOR to walk through the uploaded XML table 
DECLARE cur CURSOR LOCAL for 
     SELECT 
       Question_ID = XTBL .value('(../../ID)[1]', 'bigint'), 
       QuestionText = XTbl.value('(../../QuestionText)[1]', 'varchar(200)'), 
       QuestionType = XTbl.value('(../../QuestionType)[1]', 'bigint'), 
       Questionaire_ID = XTbl.value('(../../QuestionaireID)[1]', 'bigint'), 
       Filter = XTbl.value('(../../Filter)[1]', 'bigint'), 
       Value = XTbl.value('(Value)[1]', 'varchar(400)'), 
       RequiresExplanation = XTbl.value('(RequiresExplanation)[1]', 'int'), 
       ReviewRequired = XTbl.value('(ReviewRequire)[1]', 'char(1)') 
     FROM 
      @XmlString.nodes('/Questions/Question/PossibleAnswers/PossibleAnswer') AS XD(XTbl) 
+0

需要xml文件以及如何從xml代碼中提取值 – radar 2014-11-05 19:36:35

+0

@RADAR是您需要的嗎? – 2014-11-05 19:42:27

+0

看起來不錯,其中更新語句中使用的ID集在哪裏修改此ID? – radar 2014-11-05 19:52:24

回答

1

更新表TestPossible使用Question_ID

,如果我們做以下面的示例輸入爲例,同一個問題id有兩個值,只有一行,即最後一行匹配並更新。

Question_ID Value 
2422 "yes it did" 
2422 "no it did not" 

一種選擇是消除這些問題的所有行和更新新的可能值 或者你需要有另一種獨特的密鑰識別各個可能的答案值。