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