<?xml version="1.0" encoding="utf-8"?><!-- generator="b2evolution/6.11.7-stable" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Frank Kalis - Neueste Kommentare auf Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
		<link>https://www.insidesql.org/blogs/frankkalis/?disp=comments</link>
		<atom:link rel="self" type="application/rss+xml" href="https://www.insidesql.org/blogs/frankkalis/?tempskin=_rss2&#38;disp=comments&#38;p=1236" />
		<description></description>
		<language>de-DE</language>
		<docs>http://backend.userland.com/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=6.11.7-stable"/>
		<ttl>60</ttl>
		<item>
			<title> Armin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Mon, 24 Sep 2012 11:18:34 +0000</pubDate>
			<dc:creator><span class="user anonymous" rel="bubbletip_comment_2147">Armin</span></dc:creator>
			<guid isPermaLink="false">c2147@https://www.insidesql.org/blogs/</guid>
			<description>So! Aus dem Urlaub zurück und fit für neue Herausforderungen.
Deswegen die späte Meldung. Sorry!
Dein Vorschlag hört sich interressant an. Aber erzeuge ich dann nicht redundante Daten? Ich habe im Moment auch noch so gar keine Vorstellung wie ich das Umsetzen soll und wie genau Du Dir das mit den Konfigurationstabellen vorgestellt hast.
Ich kann ja mal einen groben Abriss über den Aufbau meiner DB geben obgleich das wohl das Off-Topic geht. 
Ichabe also eine Tabelle mit Kontakten, eine mit den Abteilungen für die sie tätig sein können, eine Hilfstabelle die Kontakte und Abteilungen m:n verbindet, eine mit den Eskalationsstufen, eine weitere HT die die Eskalationsstufen mit der HT KontakteAbteilungen m:n verbindet und natürlich die Tabelle in der alle Themen aufgelistet sind mit Ihrer jeweiligen Eskalationsstufe als Markierung. Dachte eigentlich das wäre schon ziemlich gut aber besser geht ja immer. vielleicht kann man das ja in einem anderen Themenbereich weiterdiskutieren wenn es hier nicht der richtige Platz ist. gerne auch per Mail..</description>
			<content:encoded><![CDATA[So! Aus dem Urlaub zurück und fit für neue Herausforderungen.
Deswegen die späte Meldung. Sorry!
Dein Vorschlag hört sich interressant an. Aber erzeuge ich dann nicht redundante Daten? Ich habe im Moment auch noch so gar keine Vorstellung wie ich das Umsetzen soll und wie genau Du Dir das mit den Konfigurationstabellen vorgestellt hast.
Ich kann ja mal einen groben Abriss über den Aufbau meiner DB geben obgleich das wohl das Off-Topic geht. 
Ichabe also eine Tabelle mit Kontakten, eine mit den Abteilungen für die sie tätig sein können, eine Hilfstabelle die Kontakte und Abteilungen m:n verbindet, eine mit den Eskalationsstufen, eine weitere HT die die Eskalationsstufen mit der HT KontakteAbteilungen m:n verbindet und natürlich die Tabelle in der alle Themen aufgelistet sind mit Ihrer jeweiligen Eskalationsstufe als Markierung. Dachte eigentlich das wäre schon ziemlich gut aber besser geht ja immer. vielleicht kann man das ja in einem anderen Themenbereich weiterdiskutieren wenn es hier nicht der richtige Platz ist. gerne auch per Mail..]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2147</link>
		</item>
		<item>
			<title>admin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Fri, 07 Sep 2012 05:16:41 +0000</pubDate>
			<dc:creator><a href="http://www.insidesql.org/blogs/" title="Benutzerprofil anzeigen" class="login user nowrap" rel="bubbletip_user_1"><span class="identity_link_username">admin</span></a></dc:creator>
			<guid isPermaLink="false">c2139@https://www.insidesql.org/blogs/</guid>
			<description>Ja, dann habe ich dich tatsächlich falsch verstanden. Bei solch einer Aufgabenstellung würde ich sowieso dann darüber nachdenken, die diversen Eskalationsstufen in Tabellen abzubilden, um nachzuvollziehen, wann welches Thema welche Stufe erreicht hat und was aufgrund dessen veranlasst wurde und wer wie benachrichtigt werden soll. 
Ausserdem würde ich mir Konfigurationstabellen anlegen, wo definiert wird, für welches Thema in welcher Stufe welche Personen eine Mail als Empfänger oder CC: erhalten sollen und dies auch in der Datenbank klar separieren, vielleicht sogar in separaten Tabellen ablegen. Damit reduziert sich der Aufwand dann später auf das Verketten der einzelnen Empfänger in Abhängigkeit von der Eskalationsstufe und du musst nicht erst ermitteln, ob jemand schon vorher benachrichtigt wurde und jetzt auf cc: erscheinen soll.
Ein netter Nebeneffekt ist ausserdem, dass alles datengesteuert abläuft und die Pflege dafür dem Anwender übertragen wird. :-)</description>
			<content:encoded><![CDATA[Ja, dann habe ich dich tatsächlich falsch verstanden. Bei solch einer Aufgabenstellung würde ich sowieso dann darüber nachdenken, die diversen Eskalationsstufen in Tabellen abzubilden, um nachzuvollziehen, wann welches Thema welche Stufe erreicht hat und was aufgrund dessen veranlasst wurde und wer wie benachrichtigt werden soll. 
Ausserdem würde ich mir Konfigurationstabellen anlegen, wo definiert wird, für welches Thema in welcher Stufe welche Personen eine Mail als Empfänger oder CC: erhalten sollen und dies auch in der Datenbank klar separieren, vielleicht sogar in separaten Tabellen ablegen. Damit reduziert sich der Aufwand dann später auf das Verketten der einzelnen Empfänger in Abhängigkeit von der Eskalationsstufe und du musst nicht erst ermitteln, ob jemand schon vorher benachrichtigt wurde und jetzt auf cc: erscheinen soll.
Ein netter Nebeneffekt ist ausserdem, dass alles datengesteuert abläuft und die Pflege dafür dem Anwender übertragen wird. :-)]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2139</link>
		</item>
		<item>
			<title> Armin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Wed, 05 Sep 2012 07:55:36 +0000</pubDate>
			<dc:creator><span class="user anonymous" rel="bubbletip_comment_2137">Armin</span></dc:creator>
			<guid isPermaLink="false">c2137@https://www.insidesql.org/blogs/</guid>
			<description>Vielleicht habe ich mit &quot;Step&quot; das falsche Wort gewählt.
Es geht bei mir darum eine DB zum Eskalieren von bestimmten themen zu basteln.
In der Eskalationsstufe 1 gibt es nur &quot;An&quot; Adressaten.
In der Eskalationsstufe 2 soll es andere &quot;An&quot; Adressaten plus die &quot;An&quot; Adressaten aus Stufe 1 im &quot;Cc&quot; geben usw...
Werde heute mal nach den Rekursiven Abfragen schauen. Mal schauen ob ich dahinter blicke.</description>
			<content:encoded><![CDATA[Vielleicht habe ich mit "Step" das falsche Wort gewählt.
Es geht bei mir darum eine DB zum Eskalieren von bestimmten themen zu basteln.
In der Eskalationsstufe 1 gibt es nur "An" Adressaten.
In der Eskalationsstufe 2 soll es andere "An" Adressaten plus die "An" Adressaten aus Stufe 1 im "Cc" geben usw...
Werde heute mal nach den Rekursiven Abfragen schauen. Mal schauen ob ich dahinter blicke.]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2137</link>
		</item>
		<item>
			<title>admin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Tue, 04 Sep 2012 05:17:03 +0000</pubDate>
			<dc:creator><a href="http://www.insidesql.org/blogs/" title="Benutzerprofil anzeigen" class="login user nowrap" rel="bubbletip_user_1"><span class="identity_link_username">admin</span></a></dc:creator>
			<guid isPermaLink="false">c2134@https://www.insidesql.org/blogs/</guid>
			<description>Ich bin mir jetzt nicht sicher, ob ich dein Problem wirklich verstehe. Du versuchst über eine Abfrage die Schritte 1 - 4 abzuarbeiten? Da würde ich mal in Richtung rekursive CTE googlen.</description>
			<content:encoded><![CDATA[Ich bin mir jetzt nicht sicher, ob ich dein Problem wirklich verstehe. Du versuchst über eine Abfrage die Schritte 1 - 4 abzuarbeiten? Da würde ich mal in Richtung rekursive CTE googlen.]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2134</link>
		</item>
		<item>
			<title> Armin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Mon, 03 Sep 2012 09:02:57 +0000</pubDate>
			<dc:creator><span class="user anonymous" rel="bubbletip_comment_2132">Armin</span></dc:creator>
			<guid isPermaLink="false">c2132@https://www.insidesql.org/blogs/</guid>
			<description>Moin Frank,
klappt nun prima. Dankeschön. :o)
Nun stehe ich aber auch schon vor dem nächsten Problem.
Ich benutze die Abfrage zum einen um einen &quot;An&quot;  Verteiler zu erstellen
und zum anderen um einen &quot;Cc&quot; Verteiler zu erstellen.
Im Cc sollen immer alle die drin stehen die bereits vorher im An gestanden haben.
Beispiel: 
Step1 An: Name1; Name2; ... Cc: Nicht definiert!
Step2 An: Name3                  Cc: Empfänger aus Step1
Step3 An: Name4                  Cc: Empfänger aus Step1 und Step2 
Step4 An: Name5                  Cc: Empfänger aus Step1, Step2 und Step3

Step1 und 2 funktionieren noch aber spätestens beim dritten bekomme ich Schwierigkeiten da werden wieder mehrere Zeilen generiert. Kann man das auch irgendwie verwurschteln?</description>
			<content:encoded><![CDATA[Moin Frank,
klappt nun prima. Dankeschön. :o)
Nun stehe ich aber auch schon vor dem nächsten Problem.
Ich benutze die Abfrage zum einen um einen "An"  Verteiler zu erstellen
und zum anderen um einen "Cc" Verteiler zu erstellen.
Im Cc sollen immer alle die drin stehen die bereits vorher im An gestanden haben.
Beispiel: 
Step1 An: Name1; Name2; ... Cc: Nicht definiert!
Step2 An: Name3                  Cc: Empfänger aus Step1
Step3 An: Name4                  Cc: Empfänger aus Step1 und Step2 
Step4 An: Name5                  Cc: Empfänger aus Step1, Step2 und Step3

Step1 und 2 funktionieren noch aber spätestens beim dritten bekomme ich Schwierigkeiten da werden wieder mehrere Zeilen generiert. Kann man das auch irgendwie verwurschteln?]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2132</link>
		</item>
		<item>
			<title>admin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Mon, 03 Sep 2012 05:06:00 +0000</pubDate>
			<dc:creator><a href="http://www.insidesql.org/blogs/" title="Benutzerprofil anzeigen" class="login user nowrap" rel="bubbletip_user_1"><span class="identity_link_username">admin</span></a></dc:creator>
			<guid isPermaLink="false">c2131@https://www.insidesql.org/blogs/</guid>
			<description>Kann es sein, dass MYCOMMASEPARATEDLIST bei dir manchmal nur ein leerer String ist? Falls ja, knallt das LEFT weil dann Len(MYCOMMASEPARATEDLIST) - 1 = -1 ist und den Fehler verursacht. 

Seit ich damals den Beitrag geschrieben habe, habe ich mir angewöhnt, den String anders zu verketten, indem ich den Separator voranstelle und dann die anderen Werte anhänge. Das gibt mir dann die Möglichkeit, anstelle der Verbindung der zwei Funktionen LEFT() &amp;amp; LEN() nur noch SUBSTRING() ausführen zu müssen, um das gleiche zu erzielen. Also, in deinem Fall so etwa:
&lt;pre class=&quot;sourcecode&quot;&gt;SELECT
    t.ABTEILUNG,
    t.STEP,
    SUBSTRING(MYCOMMASEPARATEDLIST, 2, 8000) AS MYCOMMASEPARATEDLIST
FROM
    myDB.dbo.qry_verteilerkontakte AS t
    CROSS APPLY (SELECT
                    &#039;;&#039; + CAST(EMAIL AS varchar(255))
                 FROM
                    myDB.dbo.qry_verteilerkontakte AS v
                 WHERE
                    t.ID1 = v.ID1 AND
                    t.ID2 = v.ID2
                 ORDER BY
                    v.ABTEILUNG
    FOR
                 XML PATH(&#039;&#039;)) AS x (MYCOMMASEPARATEDLIST)&lt;/pre&gt;</description>
			<content:encoded><![CDATA[Kann es sein, dass MYCOMMASEPARATEDLIST bei dir manchmal nur ein leerer String ist? Falls ja, knallt das LEFT weil dann Len(MYCOMMASEPARATEDLIST) - 1 = -1 ist und den Fehler verursacht. 

Seit ich damals den Beitrag geschrieben habe, habe ich mir angewöhnt, den String anders zu verketten, indem ich den Separator voranstelle und dann die anderen Werte anhänge. Das gibt mir dann die Möglichkeit, anstelle der Verbindung der zwei Funktionen LEFT() &amp; LEN() nur noch SUBSTRING() ausführen zu müssen, um das gleiche zu erzielen. Also, in deinem Fall so etwa:
<pre class="sourcecode">SELECT
    t.ABTEILUNG,
    t.STEP,
    SUBSTRING(MYCOMMASEPARATEDLIST, 2, 8000) AS MYCOMMASEPARATEDLIST
FROM
    myDB.dbo.qry_verteilerkontakte AS t
    CROSS APPLY (SELECT
                    ';' + CAST(EMAIL AS varchar(255))
                 FROM
                    myDB.dbo.qry_verteilerkontakte AS v
                 WHERE
                    t.ID1 = v.ID1 AND
                    t.ID2 = v.ID2
                 ORDER BY
                    v.ABTEILUNG
    FOR
                 XML PATH('')) AS x (MYCOMMASEPARATEDLIST)</pre>]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2131</link>
		</item>
		<item>
			<title> Armin in Antwort auf: Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2</title>
			<pubDate>Thu, 30 Aug 2012 15:32:45 +0000</pubDate>
			<dc:creator><span class="user anonymous" rel="bubbletip_comment_2130">Armin</span></dc:creator>
			<guid isPermaLink="false">c2130@https://www.insidesql.org/blogs/</guid>
			<description>Zunächst einmal vielen Dank für diesen Beitrag.
Nun zu meinem Problem. Ich möchte EMail Adressen zusammen fassen.
Dazu habe ich den o. g. für meine Zwecke etas anpassen müssen.

SELECT t.ABTEILUNG, 
       t.STEP, 
       LEFT(MYCOMMASEPARATEDLIST, Len(MYCOMMASEPARATEDLIST) - 1) AS MYCOMMASEPARATEDLIST 
FROM   myDB.dbo.qry_verteilerkontakte AS t 
       CROSS APPLY (SELECT Cast(EMAIL AS VARCHAR(255)) + &#039;;&#039; 
                    FROM   myDB.dbo.qry_verteilerkontakte AS v 
                    WHERE  t.ID1 = v.ID1 
                           AND t.ID2 = v.ID2 
                    ORDER  BY v.ABTEILUNG 
                    FOR XML PATH(&#039;&#039;)) AS x(MYCOMMASEPARATEDLIST)

Nun bekomme ich aber bei der Ausführung eine Fehlermeldung.

Msg 537, Level 16, State 5, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.

Vielen Dank im Voraus und Grüße aus HH

Armin

Wo hakt es denn da bei mir?</description>
			<content:encoded><![CDATA[Zunächst einmal vielen Dank für diesen Beitrag.
Nun zu meinem Problem. Ich möchte EMail Adressen zusammen fassen.
Dazu habe ich den o. g. für meine Zwecke etas anpassen müssen.

SELECT t.ABTEILUNG, 
       t.STEP, 
       LEFT(MYCOMMASEPARATEDLIST, Len(MYCOMMASEPARATEDLIST) - 1) AS MYCOMMASEPARATEDLIST 
FROM   myDB.dbo.qry_verteilerkontakte AS t 
       CROSS APPLY (SELECT Cast(EMAIL AS VARCHAR(255)) + ';' 
                    FROM   myDB.dbo.qry_verteilerkontakte AS v 
                    WHERE  t.ID1 = v.ID1 
                           AND t.ID2 = v.ID2 
                    ORDER  BY v.ABTEILUNG 
                    FOR XML PATH('')) AS x(MYCOMMASEPARATEDLIST)

Nun bekomme ich aber bei der Ausführung eine Fehlermeldung.

Msg 537, Level 16, State 5, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.

Vielen Dank im Voraus und Grüße aus HH

Armin

Wo hakt es denn da bei mir?]]></content:encoded>
			<link>https://www.insidesql.org/blogs/frankkalis/2007/09/28/spaltenwerte-als-kommaseparierte-liste-zurueckgeben-teil-2#c2130</link>
		</item>
			</channel>
</rss>
