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,而不是如何我在我的示例表中进行了描述。有没有办法做到这一点?我尝试重新排列一些东西,甚至只是自己插入问题,但仍然插入多次。
随口说说,我会说“可能的答案”交叉应用导致了重复。 – UnhandledExcepSean 2014-11-04 18:09:32