Jana_ Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Hallo, ich arbeite mit ms sql 2005. Gibt es eine Möglichkeit alle Spalten einer Tabelle zusammenzufassen? Problem dabei, ich kenne weder Namen der Spalten noch wieviele es sind. Ich will also alle Spalten konkatieren. Wenns nur 2 sind gehts ja ganz einfach über das +. (SELECT Name + ' ' + Vorname FROM tbl_Namen) Wie aber nun wenn ich wie gesagt weder Namen noch Anzahl der Spalten kenne?
plaaner Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Hallo, ich würd sagen select * from tbl_name;
Jana_ Geschrieben 6. Oktober 2010 Autor Geschrieben 6. Oktober 2010 mh... select * ist nunmal nicht das was ich will. ich will alles in nur einer einzigen spalte haben.
.NETter Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Problem dabei, ich kenne weder Namen der Spalten noch wieviele es sind. Bei dieser Variante wirst Du auch Probleme mit den Datentypen bekommen. Ist hier ein int-Wert oder ähnliches dabei wird es nicht funktionieren. Es sei denn Du wandelst ihn explizit in einen kompatiblen Datentyp um. Wenn Du nur Spaltenname und deren Typ anhand des Tabellennamen ermitteln möchtest, könntest Du Systemsichten bemühen: SELECT so.Name AS Tabelle, sc.name AS Feld, st.[name] AS Datentyp FROM sys.objects so LEFT JOIN sys.columns sc ON so.object_id = sc.object_id LEFT JOIN sys.types st ON sc.system_type_id = st.system_type_id WHERE [type] = 'U' AND st.system_type_id = st.user_type_id AND so.[Name] = 'Mitarbeiter' Aber wozu benötigst du eine derartige Konkatenierung der Feldwerte? Vielleicht gibts da noch einen anderen Weg wenn Du das Ziel verrätst. Gruß, Thomas
etreu Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Mal ganz naiv: SELECT CONCAT(*) FROM Tabelle
Goos Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Ich verzichte mal darauf irgendwelche Diskussionen über den Sinn der Anforderung anzuzetteln und behaupte, dass es nur die Möglichkeit über dynamisches SQL, oder alternativ eine CLR Funktion gibt. Mein Vorschlag ist folgender: DECLARE @Table SYSNAME DECLARE @cmd2 NVARCHAR(MAX) SET @Table = 't1' SELECT @cmd2 = N'SELECT ' + (STUFF((SELECT N' + '' '' + CAST(' + QUOTENAME(CAST(b.name AS SYSNAME)) + N' as VARCHAR(MAX))' FROM sysobjects a, syscolumns b WHERE a.type = 'U' AND a.id = b.id AND a.name = @Table FOR XML PATH('')),1,6,'')) + N' FROM ' + QUOTENAME(@Table) SELECT @cmd2 EXEC sp_executesql @cmd2 Man verzeihe mir die Verwendung der Aliase a und b Goos
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden