Результат записи SQL в XML при ошибке - PullRequest
2 голосов
/ 21 октября 2011
 SELECT   
    (SELECT v_value as "@value", columnname as "@columnname", 
            updatedby as "@updatedby", emailid as "@emailid",
            updatedon as "@updatedon"              
     from nodetable, Progresss PGA, mastertable 
     where columnname ='SSNNO' 
           and PGA.ProjId=9 
           AND OBSID IN (SELECT NodeId FROM projecttable 
                         WHERE ParentId=mastertable.roles AND Title='some value') 
           AND UserId=1 
           AND mastertable.FileID=nodetable.fileid 
           AND mastertable.FileID=821  
     ORDER BY updatedon desc  FOR XML PATH('Forms'), TYPE)
 FOR XML PATH('Form'), TYPE

Это мой запрос на получение XML .. Не беспокойтесь, он работает нормально ..

Но моя проблема, если условие не выполняется, я хочу напечатать еще один тег, который он всегда сообщаетчто произошло в запросе ..

Как и в этом запросе, если все условия выполнены успешно, я получу полный XML ..

Иначе я получу

 <Form />

Но я хочу напечатать результат как в случае неудачи ..

<Form SUCCESS="0"/>

1 Ответ

3 голосов
/ 21 октября 2011
DECLARE @XML XML =
    (SELECT v_value as "@value", columnname as "@columnname", 
            updatedby as "@updatedby", emailid as "@emailid",
            updatedon as "@updatedon"              
     from nodetable, Progresss PGA, mastertable 
     where columnname ='SSNNO' 
           and PGA.ProjId=9 
           AND OBSID IN (SELECT NodeId FROM projecttable 
                         WHERE ParentId=mastertable.roles AND Title='some value') 
           AND UserId=1 
           AND mastertable.FileID=nodetable.fileid 
           AND mastertable.FileID=821  
     ORDER BY updatedon desc  FOR XML PATH('Forms'))

IF @XML IS NULL
  SELECT CAST('<Form SUCCESS="0"/>' AS XML)
ELSE
  SELECT @XML FOR XML PATH('Form')

как одно утверждение

SELECT CASE WHEN T.X IS NULL THEN 0 END AS [@SUCCESS],
       T.X AS [*]
FROM 
    (SELECT v_value as "@value", columnname as "@columnname", 
            updatedby as "@updatedby", emailid as "@emailid",
            updatedon as "@updatedon"              
     from nodetable, Progresss PGA, mastertable 
     where columnname ='SSNNO' 
           and PGA.ProjId=9 
           AND OBSID IN (SELECT NodeId FROM projecttable 
                         WHERE ParentId=mastertable.roles AND Title='some value') 
           AND UserId=1 
           AND mastertable.FileID=nodetable.fileid 
           AND mastertable.FileID=821  
     ORDER BY updatedon desc  FOR XML PATH('Forms'), TYPE) AS T(X)
FOR XML PATH('Form'), TYPE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...