我有一個類似的SQL表:SELECT值WHERE子句
create table #Temp_xml
(
ID int not null,
Name varchar(10) null,
Step XML null
)
truncate table #Temp_xml
Insert INTO #Temp_xml (ID, Name, Step) Values
(1, 'Query 1',
'<LoadData>
<Step>
<StepName>Step 1</StepName>
<StepType>Validation</StepType>
<Result>PAST</Result>
</Step>
<Step>
<StepName>Step 2</StepName>
<Command>SELECT colA, colB FROM Mytbl</Command>
<ID>888</ID>
</Step>
<Step>
<StepName>Step 3</StepName>
<Command>Truncate table tblABC</Command>
<ID>103</ID>
</Step>
</LoadData>')
Insert INTO #Temp_xml (ID, Name, Step) Values
(2, 'Query 2',
'<LoadData>
<Step>
<StepName>Step 1</StepName>
<StepType>Validation</StepType>
<Result>True</Result>
<ID>112</ID>
</Step>
<Step>
<StepName>Step 2</StepName>
<Command>SELECT colA, colB FROM Mytbl</Command>
</Step>
<Step>
<StepName>Step 3</StepName>
<Command>Exec dbo.MyStoredproc</Command>
</Step>
</LoadData>')
Insert INTO #Temp_xml (ID, Name, Step) Values
(3, 'Query 3',
'<LoadData>
<Step>
<StepName>Step 1</StepName>
<StepType>Validation</StepType>
<Result>False</Result>
</Step>
<Step>
<StepName>Step 2</StepName>
<Command>SELECT colA, colB FROM Mytbl</Command>
<ID>666</ID>
</Step>
<Step>
<StepName>Step 3</StepName>
<Command>Update tblXyz set colA = ''999'' FROM tbl_test</Command>
</Step>
<Step>
<StepName>Step 4</StepName>
<Command>Truncate table tblABC</Command>
<ID>678</ID>
</Step>
</LoadData>')
我需要搜索從#temp_xml用於行具有ID = 678以下查詢列步驟將不會返回數據,因爲 有多個節點。
select * from #Temp_xml
WHERE step.value('(/LoadData/Step/ID)[1]', 'varchar(max)') = 678
然而,由於第二次出現的ID,我得到想要的結果:
select * from #Temp_xml
WHERE step.value('(/LoadData/Step/ID)[2]', 'varchar(max)') = 678
我的問題是,我怎樣才能使這個搜索更通用,這樣我就不用放在方括號[]中出現 ?
BTW,你應該考慮在臨時表變量表。 –