2016-07-07 15 views
0

Ich benutze einen Code, den ich auf einer Website gefunden habe und ich kann mein Gehirn einfach nicht verstehen.Wie funktioniert diese SQL COALESCE-Funktion?

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
      '[' + CONVERT(NVARCHAR, [DATE], 106) + ']') 
      FROM (SELECT DISTINCT [DATE] FROM #DailyReport) PV order by [DATE] 

Es gibt

[02 May 2016],[03 May 2016],[04 May 2016],[05 May 2016],[06 May 2016],[08 May 2016],[09 May 2016],[10 May 2016],[11 May 2016],[12 May 2016],[13 May 2016],[15 May 2016],[16 May 2016],[17 May 2016],[18 May 2016],[19 May 2016],[20 May 2016],[22 May 2016],[23 May 2016],[24 May 2016],[25 May 2016],[26 May 2016],[27 May 2016],[29 May 2016],[30 May 2016],[31 May 2016] 

aber wie funktioniert es? Ich wünschte, ich hätte verstanden, wie ich all diese Kolumnen bekommen habe und warum es zwei "[+ CONVERT (NVARCHAR, [DATE], 106) + ']' Sätze gibt.

Antwort

2

Die zwei Sätze, die Sie hervorheben, sind einfach so, coalesce() funktioniert. Es gibt eine einfachere Möglichkeit, die Logik zu schreiben. Vielleicht hilft dies zu erklären, was passiert:

SELECT @cols = COALESCE(@cols + ',', '') + '[' + CONVERT(NVARCHAR(255), [DATE], 106) + ']', 
FROM (SELECT DISTINCT [DATE] FROM #DailyReport 
    ) PV 
ORDER BY [DATE]; 

In Ihrem Fall die vollständige Verkettung COALESCE() das erste Argument ist, so wird der Ausdruck als erstes Argument benötigt. Aber wenn das NULL ist, dann wird es wieder benötigt.

Hinweis: Bei Verwendung Verwendung VARCHAR(), NVARCHAR() oder eine beliebige Zeichentyp in SQL Server, sollten Sie immer eine Längenangabe enthalten. Die Standardlänge variiert je nach Kontext, und wenn der Standardwert nicht groß genug ist, kann es sehr schwierig sein, den Fehler zu finden.