Announcement

Collapse
No announcement yet.

Tabellenamen als Variable in SP oder Function?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabellenamen als Variable in SP oder Function?

    Hallo allerseits,

    Nun, wir haben hier ein (nach meiner Ansicht) etwas besch****eidenes MS-SQl DB-System, welches leider in seiner Struktur kaum mehr veränderbar ist ohne alles neu aufzubauen. Um mit möglichst wenig Aufwand einige Automatisierungen einzubringen, möchte ich einige zusätzliche Functionen und Prozeduren erstellen, welche so ne Art "For-each" durchlaufen können.

    Es werden Messwerte von telemetriesystemen aufgezeichnet. Jedes solche Historyfile hat für seine Messdaten eine eigene Tabelle.

    Ich möchte jetzt angenommen den letzten Messerwert pro Tabelle ermitteln (per funktion), kann ich da mit irgendwie den Tabellenamen dynamisch per Variable übergeben?

    Die funktion würde dann also so ungefähr folgendes machen:

    <PRE>
    CREATE function return_lastdt ( @table as sysobject)
    RETURNS datetime
    BEGIN
    declare @lastdt as datetime

    Select @lastdt = max(dt) from @table

    return @lastdt
    END
    </PRE>

    So funktioniert dies aber natürlich nicht. Wie kann ich das passend realisieren?

  • #2
    Das ist nicht ganz so einfach, weil nicht vollständig im BOL beschrieben. Aber es müsste etwa so gehen (wenn die Tabelle als Name, nicht als sysobject vorliegt):

    CREATE function return_lastdt ( @table as varchar(50)) <br>
    RETURNS datetime<br>
    BEGIN <br>
    declare<br>
    @lastdt datetime,<br>
    @cmd nvarchar(200)<br>
    <br>
    select @cmd = 'select @d = max(dt) from ' + @table<br>
    exec sp_executesql @s, N'@d datetime OUTPUT', @lastdt OUTPUT<br>
    <br>
    return @lastdt<br>
    END

    Aufpassen muss man dabei, dass das Kommando als auch die Parameterdefinition als NVARCHAR definiert werden und nicht als einfaches VARCHAR!

    bye,
    Helmu

    Comment


    • #3
      Hmm, danke erstmal, das würde soweit funktionieren..

      Wenn ich jetzt diese Funktion, die soweit läuft in einen View integrieren will, dann bekomme ich den "Only functions and extended stored procedures can be executed from within a function."-Fehler. Ich denke das wäre somit Endstation der Idee oder?

      Shit happens

      Comment


      • #4
        Ich habe mir dieses Szenario auch schon überlegt für meine Anwendung...

        Aber zerstört man damit nicht den Grundgedanken und somit den technischen Vorteil einer Stored Procedure ?

        Die Stored Procedure wird ja vom Server extra kompiliert damit ein optimierter Zugriffsplan genau für dieses Szenario erstellt werden kann. Wenn nun die Zieltabelle variabel ist, wäre das ja hinfällig..

        Comment

        Working...
        X