Tabellenname als Variable behandeln (ohne exec)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellenname als Variable behandeln (ohne exec)

    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):

    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
    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.
    Zuletzt geändert von snake; 06.07.2006, 09:16.
    [COLOR=darkblue]

    Wäre es nicht adequat, den Usus
    heterogener Termini zu minimieren?

    [/COLOR]

  • #2
    Hallo nochmals

    Will euch nicht stressen, möchte aber nachfragen ob meine Beschreibung unzureichend war oder ob ihr auch nicht wisst wie man das Problem lösen könnte (ausser mit EXEC())

    Habe auch schon im Forum gesucht und in google, anscheinend kennt niemand eine Lösung...

    Falls mir niemand weiterhelfen kann muss ich wirklich die halbe Prozedur mit EXEC schreiben, was sicherlich Performance-mässig nicht das Gelbe vom Ei ist - zudem wäre das nicht professionell und schlecht überschaubar....


    LG
    [COLOR=darkblue]

    Wäre es nicht adequat, den Usus
    heterogener Termini zu minimieren?

    [/COLOR]

    Kommentar


    • #3
      Nochmals Hallo

      Habe zwar keine Lösung für das Problem gefunden, aber ein von
      Erland Sommarskog geschriebener Text erläutert wieso das nicht funktioniert und auch so bleiben sollte.
      Ich habe mich jetzt trotzdem entschlossen alles in eine Tabelle zu packen und einfach per art_id die Prozedur aufzubauen.
      Obwohl es mehr Nachteile als Vorteile in meinem Fall bietet.

      Vielleicht hilft dieser Link auch anderen weiter.

      LG
      [COLOR=darkblue]

      Wäre es nicht adequat, den Usus
      heterogener Termini zu minimieren?

      [/COLOR]

      Kommentar

      Lädt...
      X