joni2000de
Goto Top

MSSQL Tabellenname an eine Funktion übergeben

Hallo Amins,

ich komme mal wieder nicht weiter und hoffe auf eure Hilfe.

Ist es möglich an eine Funktion einen Tabellenamen zu übergeben? In einer Tabelle, deren Name sich je nach User ändert, sind Werte gespeichert. Diese Werte müssen in der Funktion verarbeitet werden. Ich habe keine Lösung gefunden den Wert zu übergeben. Als Variable des Typs table geht nicht, da die Funktion diesen Typ nicht zu lässt. Als varchar geht zwar dann bringe ich aber in der Funktion das Select nicht hin, da select * from @variable nicht funktioniert und exec('select * from ' + @variable) in der Funktion auch nicht erlaubt ist.

Ich muss die Tabelle an mehrere unterschiedliche Funktionen übergeben.

Danke für euer Hilfe.

Gruß Joni
Kommentar vom Moderator Biber am Mar 25, 2012 um 15:53:34 Uhr
Zitat von @Logan000:
Funktionen geben klar bennante Werte zurück.
So wie auch meine Funktion IncreaseRGC()
Demo:
SELECT IncreaseRGC()
#806

Content-Key: 179215

Url: https://administrator.de/contentid/179215

Printed on: April 23, 2024 at 23:04 o'clock

Member: nxclass
nxclass Jan 19, 2012 at 22:39:05 (UTC)
Goto Top
Übergebe es als VARCHAR - baue mit CONCAT ein funktionierenden SQL String zusammen - jetzt kannst Du diesen in einem PREPARE .. EXECUTE Statement benutzen.

EDIT - das geht jedenfalls in MySql - hab das wiedermal überlesen, dass es um MSSql geht
Member: joni2000de
joni2000de Jan 19, 2012 at 22:45:34 (UTC)
Goto Top
Hi nxclass,

das mit dem exec funktioniert leider nicht da dies in einer Funktion nicht zulässig ist.

Trotzdem danke.

Gruß Joni
Member: Logan000
Logan000 Jan 20, 2012 at 08:16:03 (UTC)
Goto Top
Moin Moin

Da du nxclass "Wink mit dem Zaunpfahl" nicht verstanden hast...
1. Um was für ein Datenbank system handelt es sich und welche Version?
2. Was soll deine "Funktion" leisten bzw. zurückgeben?
Das Ergebnis von SELECT * FROM Warsauchimmer ist als rückgabewert für eine Funktion kaum zu gebrauchen.

Gruß L.
Member: joni2000de
joni2000de Jan 20, 2012 at 08:42:29 (UTC)
Goto Top
Hallo Logan,

MSSQL Server 2008 R2. Die Funktionen geben mir je eine Tabelle zurück die verschiedene Selects mit Joins enthalten. Die über die Funktionen erstellten Tabellen werden dann in einem Select weiterverarbeitet. Jetzt ist es aber so, dass ich in allen Funktionen auf eine gemeinsame, aber eben je nach dem welcher User das Select ausführt, unterschiedliche Tabelle zugreifen muss. Den Namen dieser Tabelle wollte ich als Variable in die Funktion übergeben, damit in der Funktion ein Select auf diese variable Tabelle möglich ist.

Wenn das nicht geht habe ich mir folgendes überlegt (ist noch nicht getestet):
Ich baue eine View die die Daten dieser Usertabellen zusammenzieht. Der Name ist dann fix und kann in der Funktion angegeben werden. Aus dieser View machen ich ein Select für welches ich als Variable die Bedingung (nämlich den betreffenden User) für die Where-Klausel übergebe.

Was meint ihr dazu?

Danke für das Feedback!

Gruß Joni
Member: Logan000
Logan000 Jan 20, 2012 at 08:58:25 (UTC)
Goto Top
Moin Joni

Ich möchte deine Kreativität nicht bremsen; aber "Usertabellen", wie ....
In einer Tabelle, deren Name sich je nach User ändert ...
sind (entschuldige den Ausdruck) Dreck.
Was immer darin gespeichert wird kommt in eine Tabelle mit statischem Namen und diese enthält ein Feld Username das entsprechend gefüllt wird.

Soviel zum DB Design. Zurück zur Funktion:
Funktionen geben klar bennante Werte zurück. Ganze Tabellen oder ErgebnisSets sind laut Dokumentation nicht zulässig (und machen auch keinen Sinn).
Kann es sein das du keine Funktion meinst, sonderen eine "gespeicherte Prozedur"?
Denn dann klappt auch ....
exec('select * from ' + @variable)  

Gruß L.
Member: joni2000de
joni2000de Mar 25, 2012 at 15:37:18 (UTC)
Goto Top
Hallo Logan,
spät aber doch hier noch mein Feedback.
Ich habe das jetzt mit einer Tabelle für alle User gelöst. Funktioniert tadellos face-smile
Danke für deine Hilfe.
Gruß Joni