2014-11-04 27 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没有以往任何时候都设置为当前的问题,因此它被执行环路两次