Hallo
Habe folgendes Problem mit MSSQL:
Wenn ich eine Prozedur schreibe und den Tabellenname als Parameter übergebe (den Testlauf mache ich im Query Analyzer), liefert mir MSSQL immer den Fehler, dass die Variable erst deklariert werden muss...
Ich kenne die alternative Methode mit exec(), wo ich mir den Befehl zusammenbaue und diesen dann als ganzen absenden kann, habe ich in anderen bereits gebraucht, da es allem Anschein nach keine Alternative gibt.
Jedoch ist diese Prozedur die ich jetzt am erstellen bin ein wenig aufwendiger und ich möchte nicht fast die ganze Prozedur in EXEC - Statements aufbauen.... Das würde zu einigen Problemen führen.
Ein Beispiel (entspricht nicht mit meiner Prozedur, dies hier ist nur eine vereinfachte Form, aber das Problem ist hiermit erklärt):
MSSQL meldet mir dass @TableName deklariert werden muss....
Kennt jemand eine bessere Lösung als mit der EXEC-Geschichte?
[ exec('SELECT * FROM tbl_' + @art_id + ' WHERE active = 1') ]
Vielen Dank im Voraus
PS: Und ja, es macht hier Sinn dass ich den Tabellenname zusammenbaue, denn ich verwende die ID später noch. Sowie es auch aus reichlichen Überlegungen kommt dass es je eine Tabelle sein muss mit einer ID hinten dran.
Habe folgendes Problem mit MSSQL:
Wenn ich eine Prozedur schreibe und den Tabellenname als Parameter übergebe (den Testlauf mache ich im Query Analyzer), liefert mir MSSQL immer den Fehler, dass die Variable erst deklariert werden muss...
Ich kenne die alternative Methode mit exec(), wo ich mir den Befehl zusammenbaue und diesen dann als ganzen absenden kann, habe ich in anderen bereits gebraucht, da es allem Anschein nach keine Alternative gibt.
Jedoch ist diese Prozedur die ich jetzt am erstellen bin ein wenig aufwendiger und ich möchte nicht fast die ganze Prozedur in EXEC - Statements aufbauen.... Das würde zu einigen Problemen führen.
Ein Beispiel (entspricht nicht mit meiner Prozedur, dies hier ist nur eine vereinfachte Form, aber das Problem ist hiermit erklärt):
Code:
ALTER PROCEDURE usp_SelTab @art_id NVARCHAR(100) AS DECLARE @TableName NVARCHAR(110) SET @TableName = 'tbl_' + @art_id SELECT * FROM [B]@TableName[/B] WHERE active = 1 GO
Kennt jemand eine bessere Lösung als mit der EXEC-Geschichte?
[ exec('SELECT * FROM tbl_' + @art_id + ' WHERE active = 1') ]
Vielen Dank im Voraus
PS: Und ja, es macht hier Sinn dass ich den Tabellenname zusammenbaue, denn ich verwende die ID später noch. Sowie es auch aus reichlichen Überlegungen kommt dass es je eine Tabelle sein muss mit einer ID hinten dran.
Kommentar