2014-11-04 69 views
1

我有一個包含問題的表格和一個包含答案的表格。現在我的答案的表有Question_ID以及與這個問題去,像答案:在SQL Server中插入兩次XML的節點

Question_ID Answer_Text 
     1   true 
     1   false 
     2   blue 
     2   brown 
     2   green 

這是我的問題表的例子:我想創建

Question_ID  Question_Text 
     1   Are you happy? 
     2   What color are your eyes? 

一個XML文件讀入SQL服務器的語句,並將這些問題的問題和答案插入到兩個獨立的表中。

這裏是我的XML:

 <Questions> 
<Question> 

     <QuestionText>Is today good?</QuestionText> 
     <QuestionType>1</QuestionType> 
     <QuestionaireID>2</QuestionaireID> 
     <Filter>31</Filter> 
     <PossibleAnswers> 
       <PossibleAnswer> 
        <Value>True</Value> 
        <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</ReviewRequire> 
       </PossibleAnswer> 
       <PossibleAnswer> 
        <Value>False</Value> 
         <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>f</ReviewRequire> 
       </PossibleAnswer> 
     </PossibleAnswers> 
</Question> 
<Question> 
     <QuestionText>How are you today?</QuestionText> 
     <QuestionType>1</QuestionType> 
     <QuestionaireID>2</QuestionaireID> 
     <Filter>127</Filter> 
     <PossibleAnswers> 
       <PossibleAnswer> 
        <Value>Great</Value> 
         <RequiresExplanation>1</RequiresExplanation> 
        <ReviewRequire>t</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> 

這是我的SQL代碼:

 DECLARE @QuestionText varchar(200) 
DECLARE @Value varchar(400) 
DECLARE @RequiresExplanation int 
DECLARE @QuestionType bigint 
DECLARE @Questionaire_ID bigint 
DECLARE @Filter bigint 
DECLARE @ReviewRequired char(1) 
DECLARE @LAST_Question varchar(200) = '' 
DECLARE @newQuestion_ID bigint 

--SET UP A CURSOR to walk through the uploaded XML table 
DECLARE cur CURSOR LOCAL for 
     SELECT 
       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 (
select cast(x as XML) 
from openrowset(
bulk 'C:\sqlXML.xml', 
single_blob) as T(x) 
    ) 
as T(x) 
cross apply  x.nodes('/Questions/Question/PossibleAnswers/PossibleAnswer') AS XD(XTbl) 

-- open the cursor 
open cur 

-- fetch the first row 

fetch next from cur into   
           @QuestionText, 
           @QuestionType, 
           @Questionaire_ID, 
           @Filter, 
           @Value, 
           @RequiresExplanation,       
           @ReviewRequired 







-- process each view we want to cache 
while @@FETCH_STATUS = 0 
BEGIN 



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

       --insert to create a question 
       --scope_identity to get @Q_ID 

    END 

    print 'Question' 
     select @newQuestion_ID = SCOPE_IDENTITY() 




     --INSERT your possible answers 
     INSERT INTO [TempDataBase].[dbo].TestPossible 
       (Q_ID,  Expl, Rev, P_A_T, QType) 
       VALUES 
       (@newQuestion_ID, @RequiresExplanation, @ReviewRequired, @Value,    @QuestionType) 
     print 'Answer' 
     -- fetch the first row 

     fetch next from cur into      

           @QuestionText, 
           @QuestionType, 
           @Questionaire_ID, 
           @Filter, 
           @Value, 
           @RequiresExplanation,       
           @ReviewRequired 


END 

的問題是,每一個問題被插入兩次,每個答案都有不同Question_ID,而不是如何我在我的示例表中進行了描述。有沒有辦法做到這一點?我嘗試重新排列一些東西,甚至只是自己插入問題,但仍然插入多次。

+0

隨口說說,我會說「可能的答案」交叉應用導致了重複。 – UnhandledExcepSean 2014-11-04 18:09:32

回答

0

@Last_Question沒有以往任何時候都設置爲當前的問題,因此它被執行環路兩次