OK, dann schreibe ich mal etwas PseudoCode. Die Tabellen und SELECT-Statements sind natürlich wesentlich komplexer, sonst würde ich ja auch keine temp-Tabelle befüllen :
So ungefähr kann man sich die StoredProcedure vorstellen :
CREATE PROCEDURE spBeispiel
AS
BEGIN
IF OBJECT_ID('tempdb..##tmpTabelle') IS NOT NULL
DROP TABLE ##tmpTabelle
CREATE TABLE ##tmpTabelle (
Name NVARCHAR(50) NULL,
Vorname NVARCHAR(50) NULL,
Typ NVARCHAR(20) NULL
)
SELECT Name, Vorname, Typ
INTO ##tmpTabelle
FROM MeineDatenQuelle
WHERE
Typ IN ('intern', 'extern')
END
Nun wollte ich mittels zwei Funktionen jeweils 2 Tabellen zurückgeliefert bekommen, die mir einerseits interne und andererseits externe Mitarbeiter ausgibt :
CREATE FUNCTION getInterne ()
RETURNS @table TABLE
(
Name NVARCHAR(50) NULL,
Vorname NVARCHAR(50) NULL
)
AS
BEGIN
SELECT Name, Vorname
INTO @table
FROM ##tmpTabelle
WHERE Typ = 'interne'
RETURN
END
CREATE FUNCTION getExterne ()
RETURNS @table TABLE
(
Name NVARCHAR(50) NULL,
Vorname NVARCHAR(50) NULL
)
AS
BEGIN
SELECT Name, Vorname
INTO @table
FROM ##tmpTabelle
WHERE Typ = 'externe'
RETURN
END
Die Funktionenen verwenden wir so, weil unser SoftwareArchitekt das so vorgibt.
Deshalb wollte ich mich einfach daran halten und habe auch hierfür Funktionen verwenden wollen.
Nun habe ich das bereits umgestellt auf eine StoredProcedure, die die gesamte Arbeit durchführt, aber eben, ich würde gerne wissen,
warum eine Funktion nicht auf eine temp-Tabelle (lesend) zugreifen darf.
Dass ich in einer Funktion keine Datenmanipulation oder Datendefinition vornehmen darf, ist mir bewusst.
Ich hoffe, dass es durch den Code etwas verständlicher geworden ist ?
Gruss und einen guten Start in die neue Woche :)