SPALTENZUTEXT (wie arcplan) als Prozedur im SQL-Server

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Captcha * Time limit is exhausted. Please reload CAPTCHA.