MS SQT / T-SQL的Stuff和XML路径的更好替代方案

时间:2014-06-27 14:05:09

标签: sql sql-server xml

我在查询中使用的东西和xml如下:

select distinct 
PayPlanInstGroup,
Dept,
Name
,stuff((select distinct DegreeTitle + '<NLine>' from FACTTable where PID=A.PID and case       when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
    ,1,0,'') AS DegreeTerminal
,stuff((select distinct DegreeYear + '<NLine>' from FACTTable where PID=A.PID and case when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
    ,1,0,'') AS DegreeYear

,stuff((select distinct dbo.AimsDecode(termid,'termid') + ' - ' + ClassLevel + ' - ' +  ClassPrefix + ' ' + ClassNumber + ' ' + (isnull(ActivityDescr,'')) + '<NLine>' from FACTTable where PID=A.PID and case when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end and CampusClass like @Campus and CollegeClass like @College and CollDeptClass like @Colldept
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
    ,1,0,'') AS [ClasssTaught]
,[TRANSCRIPTONFILEINHR]
,[CVonfileinDeptorFAIR]
,stuff((select  distinct guidelines + '<NLine>' from FACTTable where PID=A.PID and case when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end     and CampusClass like @Campus and CollegeClass like @College and CollDeptClass like @Colldept
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
        ,1,0,'') AS [GuidelinesMet]
,isnull(stuff((select  distinct OtherAcad + '<NLine>' from FACTTable where PID=A.PID and case when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end                  
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
        ,1,0,''),'') as [OtherAcademicCredentials]
,isnull(stuff((select distinct OtherQualifications + '<NLine>' from FACTTable where PID=A.PID and case when @Termid='%' then '1' else Termid end = case when @Termid='%' then '1' else a.Termid end
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
    ,1,0,''),'') as [OtherQualifications]
FROM [FAIRV3].[dbo].FACTTable a
where  a.Termid like @Termid 
and a.CampusClass  like @Campus
and a.CollegeClass like @College
and a.ColldeptClass like @Colldept
and isnull(FlagApprovedException,'') like @flag3
and FlagIEApproved like @flag4

一个查询中有多个Stuff,这会导致查询响应时间过长。在某些情况下,返回400行需要10分钟以上。我将提供更多信息,例如表格中的数据目前是什么样的,以及任何人需要的所有类型的东西。

0 个答案:

没有答案