Hallo.
Für alle, die eine Spalte einer Abfrage zu in ein Feld haben möchten (mit Trennern etc.) habe ich mal eine kleine Prozedur geschrieben – für Optimierungs-Anregungen bin ich dankbar.
Hier der Quellcode:
— =============================================
— Author: Guenther, Juergen, antares Informations-Systeme GmbH
— Create date: 2014-05-12
— Description: Schreibt das Ergebnis einer Spalte eines Select, das übergeben wird, in ein Char-Feld
–Select darf nur eine Spalte zurückliefern, Spalten- bzw. Zelleninhalt auf 255 Zeichen beschränkt
— Parameter: 1: SQL-Statement; 2: Trennzeichen zwischen Ergebnissen; 3: Erste Zeichen; 4: Letze Zeichen
— Beispiel: EXECUTE dbo.A_ColumToText ‚Select distinct ID_CR from BEW_CR‘, “‘, “‘ , ‚(“‘ , “‘)‘
— =============================================
ALTER PROCEDURE [dbo].[A_columtotext] @SelectStatement VARCHAR(5000),
@Trenner VARCHAR(10),
@Anfang VARCHAR(10),
@Ende VARCHAR(10)
AS
BEGIN
SET nocount ON
DECLARE @Spalte TABLE
(varcharspalte VARCHAR(255),zeile INT IDENTITY(1, 1))
DECLARE @Anzahl INT
DECLARE @Zaehler INT
SET @Zaehler = 2
DECLARE @Result VARCHAR(8000)
DECLARE @neu VARCHAR(255)
INSERT INTO @Spalte
EXEC (@SelectStatement)
SET @Anzahl = (SELECT Count(zeile) FROM @Spalte)
SET @Result = @Anfang + (SELECT varcharspalte FROM @Spalte WHERE zeile = 1)
WHILE @Zaehler <= @Anzahl
BEGIN
SET @neu = (SELECT varcharspalte FROM @Spalte WHERE zeile= @Zaehler)
IF Len(@Result) + Len(@neu) + Len(@Trenner)+ Len(@Ende) > 8000
BEGIN
SET @Result = ‚Error – Result-text would be to long‘
SET @Zaehler = @Anzahl + 1
END
ELSE
BEGIN
SET @Result = @Result + @Trenner + @neu
SET @Zaehler = @Zaehler + 1
END
END
IF @Result <> ‚Error – Result-text would be to long‘
SET @Result = @Result + @Ende
SELECT @Result
END
go