Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 跳过SQL生成的XML中的空参数_Sql Server_Xml - Fatal编程技术网

Sql server 跳过SQL生成的XML中的空参数

Sql server 跳过SQL生成的XML中的空参数,sql-server,xml,Sql Server,Xml,我想做什么?:从SQL Server 2014生成XML 问题:某些列包含NULL-这些列的行为类似于我的XML中的属性。如果属性的值为空/null,则我的验证器不接受该属性 例如: 期望结果 这是我的密码 WITH Inreg AS ( SELECT DISTINCT * FROM dbo.C1_UE C1

我想做什么?:从SQL Server 2014生成XML

问题:某些列包含NULL-这些列的行为类似于我的XML中的属性。如果属性的值为空/null,则我的验证器不接受该属性

例如:

期望结果

这是我的密码

   WITH    Inreg
              AS ( SELECT DISTINCT
                            *
                   FROM     dbo.C1_UE C1
                            INNER JOIN dbo.C2_UE C2 ON C1.nrp = C2.ContractNumber
                   ORDER BY C1.nrp
                            OFFSET @Page * @PageSize ROWS FETCH NEXT @PageSize
                            ROWS ONLY
                 ),
            TotalP
              AS ( SELECT   COUNT(ContractNumber) AS Nr_pers
                   FROM     dbo.C2_UE
                 ),
            TotalS
              AS ( SELECT   REPLACE(ROUND(SUM(C1.Val_capital)
                                          + SUM(C3.Suma3), 0), '.00', '') AS total
                   FROM     dbo.C1_UE C1
                            LEFT JOIN dbo.C3_UE C3 ON C1.nrp = C3.ContractNumber
                 )
        SELECT  REPLACE(( SELECT    '' as 1
                                    ( SELECT    TotalP.Nr_pers
                                      FROM      TotalP
                                    ) AS '@nr_pers' ,
                                    ( SELECT    TotalS.total
                                      FROM      TotalS
                                    ) AS '@total' ,
                                    ( SELECT *
       --pers
                                                ( SELECT 
                                                         *
                                                  FROM    @C2 C
                                                          INNER JOIN @C1 CC ON CC.nrp = C.ContractNumber

                                                  WHERE   CC.nrp = C1.nrp
                                                FOR
                                                  XML PATH('pers') ,
                                                      TYPE
                                                ) ,
      --acc
                                                ( SELECT *
                                                  FROM    @C3 c
                                                          INNER JOIN @C1 CC ON CC.nrp = c.ContractNumber
                                                  WHERE   CC.nrp = C1.nrp
                                                FOR
                                                  XML PATH('even') ,
                                                      TYPE
                                                )
                                      FROM      @C1 C1 
                                    FOR
                                      XML PATH('poli') ,
                                          TYPE
                                    )
                        FOR
                          XML PATH('decl400')
                        ), '<decl400',
                        '<decl400 xmlns="mfp:aa:dd:d403:dec:v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="mfp:mfp:aa:dd:d403:dec:v1 file:/C:/Users/a/Desktop/dec.xsd" ');

@C1、@C2和@C3是上面声明的表,@pageSize和@pageNumber也是固定值。

如果我没有弄错,您需要的是标准行为:

DECLARE @Dummy TABLE(number INT,Type INT,Trat INT,Frecv INT);
INSERT INTO @Dummy VALUES
 (31301879,NULL,1,2)          
,(73229903,2,NULL,2)           
,(73229903,2,1,2);

SELECT number AS [@number]
      ,Type AS [@Type] 
      ,Trat AS [@Trat]
      ,Frecv AS [@Frecv]
FROM @Dummy 
FOR XML PATH('polita')
-结果

<polita number="31301879" Trat="1" Frecv="2" />
<polita number="73229903" Type="2" Frecv="2" />
<polita number="73229903" Type="2" Trat="1" Frecv="2" />
如果需要空字符串而不是空字符串,则可以使用


我的第一个答案是+1,这可能有助于您理解XML是如何处理空字段还是空字段的,但如果您不想指定所有字段,另一种选择是使用XML RAW。比如说

Declare @YourTable table (number int,[Type] int,Trat int,Frecv int)
Insert Into @YourTable values
 (31301879, NULL,1   , 2) 
,(73229903, 2   ,NULL, 2) 
,(73229903, 2   ,1   , 2) 

Select * from @YourTable for XML RAW('polita')
返回

编辑-感谢Shnugo的原始“polita”


不清楚期望的结果。也许您可以编辑您的问题并添加此已编辑的!我想要的结果是在第二个引号中,这是最简单的方法@Shnugo我犹豫了一下,因为您在XML/字符串操作方面正确地警告了我。John,我必须承认我已经停止阅读FOR XML RAW,请尝试从@YourTable FOR XML RAW'polita'中选择*。无需采取进一步行动。。。字符串连接应该不是必需的…@Shnugo谢谢你的提示!关于如何更改默认设置,我脑子里出了个屁。这就是朋友的作用:-你好!这样做很好。但是,当我试图在其中添加另一个元素时,它不会以这种方式工作。我需要在FOR->FOR XML路径'polita'中使用TYPE,键入
DECLARE @Dummy TABLE(number INT,Type INT,Trat INT,Frecv INT);
INSERT INTO @Dummy VALUES
 (31301879,NULL,1,2)          
,(73229903,2,NULL,2)           
,(73229903,2,1,2);

SELECT number AS [@number]
      ,Type AS [@Type] 
      ,Trat AS [@Trat]
      ,Frecv AS [@Frecv]
FROM @Dummy 
FOR XML PATH('polita')
<polita number="31301879" Trat="1" Frecv="2" />
<polita number="73229903" Type="2" Frecv="2" />
<polita number="73229903" Type="2" Trat="1" Frecv="2" />
Declare @YourTable table (number int,[Type] int,Trat int,Frecv int)
Insert Into @YourTable values
 (31301879, NULL,1   , 2) 
,(73229903, 2   ,NULL, 2) 
,(73229903, 2   ,1   , 2) 

Select * from @YourTable for XML RAW('polita')
<polita number="31301879" Trat="1" Frecv="2" />
<polita number="73229903" Type="2" Frecv="2" />
<polita number="73229903" Type="2" Trat="1" Frecv="2" />