2016-10-16 1 views
0
STUFF((SELECT distinct ',' + QUOTENAME(c.Error_Code) 
     FROM 
      (SELECT Connection_type, Error_Code, Count 
      FROM 
       (SELECT 
        Connection_Type, error_code, count(*) AS count, 
        row_number() over(partition by Connection_Type order by count(*) desc) as ROWNUM 
       FROM 
        Staging 
       WHERE 
        TransactionDate >= convert(varchar, getdate() -1, 111) 
        AND Status != 'Deliver' 
       GROUP BY 
        Connection_Type, error_code) a 
      WHERE 
       rownum <= 10) c 
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

Qu'est-ce que la ligneQuelle est la valeur dans SQL Server

.value('.', 'NVARCHAR(MAX)' 

signifie?

+0

Votre requête SQL est convertie en XML. Pour en avoir le contrôle, vous avez utilisé 'FOR XML PATH ('')' et la valeur exécute une requête XQuery sur le fichier XML qui renvoie finalement la sortie requise. –

Répondre

1

La méthode valeur convertit les données XML à NVARCHAR, parce que la fonction STUFF (il supprime la première virgule dans la liste des valeurs) attendent expression de caractères en tant que premier argument.

Vous pouvez essayer ici: SQL Fiddle

Si vous supprimez la valeur , vous avez une erreur.

+0

merci pour l'écriture et deuxième chose à quoi sert ce TYPE? – ARJUN

+0

Indique la requête à renvoyer en tant que XML, donc en fait, si vous l'enlevez, vous n'avez pas besoin de _VALUE_ non plus. – banazs