Benutzer mit den meisten Antworten
Array als outputparameter einer Function, bzw. mehrere Outputparameter

Frage
-
Hallo liebe Forummitglieder,
meine momentane Aufgabe besteht darin, unterschidlich lange Zeichenketten einer Spalte in mehrere Spalten aufzusplittern.
Die einzelne Fragmente sind durch "/" voneinander getrennt (das ist schonmal gut :)). Ich habe ungefehr an so etwas gedacht:
USE [DB]
GO
/****** Object: UserDefinedFunction [dbo].[unconcatinate] Script Date: 20.03.2014 15:08:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter function [dbo].[unconcatinate_1] (@geschäftsfälle varchar(255))
returns @temptable table
(
Geschäftsfälle varchar(255)
)
as
begin
--Declare @geschäftsfälle varchar(255) = rtrim('Geschäftsfall1/
--G esch(ä) fts fall2/
--Gesch äftsfall3/
--Geschäftsfall4 /')
Declare @substr varchar(255)
WHILE LEN(@geschäftsfälle) > 0
BEGIN
IF PATINDEX('%/%',@geschäftsfälle) > 0
BEGIN
SET @substr = SUBSTRING(RTRIM(@geschäftsfälle), 0, PATINDEX('%/%',RTRIM(@geschäftsfälle)))
insert into @temptable values (@substr)
SET @geschäftsfälle = SUBSTRING(RTRIM(@geschäftsfälle), LEN(@substr + '/') + 1,LEN(RTRIM(@geschäftsfälle)))
END
--BEGIN
-- SET @substr = @geschäftsfälle
-- SET @substr = NULL
-- --SELECT @substr
--END
END
RETURN
END
Fehlermeldung:
Meldung 2010, Ebene 16, Status 1, Prozedur unconcatinate_1, Zeile 34
ALTER kann nicht für 'dbo.unconcatinate_1' ausgeführt werden, da es sich um einen nicht kompatiblen Objekttyp handelt.und wenn ich z.B. mein Attay so definiere:
returns @temptable table
(
Geschäftsfall varchar(255)
,Geschäftsfall1 varchar(255)
,Geschäftsfall2 varchar(255)
,Geschäftsfall3 varchar(255)
--,Geschäftsfall4 varchar(255)
--,Geschäftsfall5 varchar(255)
)dann kriege ich folgende Meldung:
Meldung 213, Ebene 16, Status 1, Prozedur unconcatinate_1, Zeile 27
Der Spaltenname oder die Anzahl der bereitgestellten Werte entspricht nicht der Tabellendefinition.Ich bin relativ neue im SQL Server, weiß aber Arrays zu schätzen!
Kann mir jemand helfen?
Danke und beste Grüße
Irina
Antworten
-
Hallo Irina,
SQL Server kennt keine Array's in diesem Sinne.
Eine Table Value Function soll Dir helfen. Das ist eine Funktion welche eine Tabelle zurückliefert.
Hier ein Beispiel: http://stackoverflow.com/questions/17193470/tsql-split-function-to-create-multiple-rows-and-columns-table-valued-functionDie Spalte mit den dort ; separtierten Werte werden der Function splitstring übergeben und diese wird am Ende über das nötige CROSS APPLY verknüpft.HTH
Grüße Alexander
- Als Antwort markiert Irina Krutashova Freitag, 21. März 2014 11:00
Alle Antworten
-
Hallo Irina,
SQL Server kennt keine Array's in diesem Sinne.
Eine Table Value Function soll Dir helfen. Das ist eine Funktion welche eine Tabelle zurückliefert.
Hier ein Beispiel: http://stackoverflow.com/questions/17193470/tsql-split-function-to-create-multiple-rows-and-columns-table-valued-functionDie Spalte mit den dort ; separtierten Werte werden der Function splitstring übergeben und diese wird am Ende über das nötige CROSS APPLY verknüpft.HTH
Grüße Alexander
- Als Antwort markiert Irina Krutashova Freitag, 21. März 2014 11:00