失败时 SQL 将结果写入 XML

标签 sql sql-server sql-server-2008

 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"/>

最佳答案

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

关于失败时 SQL 将结果写入 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844501/

相关文章:

sql - 我可以从 dacpac 生成部署脚本吗

sql-server - 多边形的边界框

c# - 将答案存储在具有唯一 ID 的 SQL 表中,并将每个答案存储在列中

c# - 为什么这个函数在第二轮运行速度快了几个数量级?

sql - 对 INT 求和时出现算术溢出错误,如何将其转换为 BIGINT?

sql-server - 如何在存储过程中使用函数

sql-server - SQL 合并复制中 "Logical Records"的 future

与临时表中的列进行比较时 SQL 排序规则冲突

javascript - OUT 在命令行中总是为空,但在 SQL 客户端中却不是?

php - 无法从数据库中获取当前月份和年份