Announcement

Collapse
No announcement yet.

Neue Tabellen dynamisch erstellen

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

  • Neue Tabellen dynamisch erstellen

    Hallo zusammen,

    ich hätte da ein Problem und bin mir nicht sicher, was die beste Lösung ist, da ich mit T-SQL noch nicht allzu viel gearbeitet habe bisher.

    Folgendes : Ein Benutzer kann "Prozesse" anlegen. Zu jedem Prozess gibt es eine vom Benutzer definierbare Parameterliste.

    Also Bsp :

    Prozess_1 Parameter : A (int),B (int), C (varchar(100))
    Prozess_2 Parameter : X (varchar(100)), Y (int)
    Prozess_3 Parameter : D (varchar(50)), E (varchar(100)), F (varchar(100)), G (varchar(100))

    usw.

    Die Anzahl der Parameter in einem Prozess ist beliebig, je nach dem was der Benutzer an Parametern anlegt.

    Was ich nun auf DB-Seite brauche ist für jeden Prozess folgendes :

    Tabelle Prozess_1_ParameterDef

    PID PName PTyp
    1 A int
    2 B int
    3 C varchar(100)

    Tabelle ProzessInfo_1

    EID A B C
    1 Wert Wert Wert
    2 Wert Wert Wert
    usw.

    Die Tabelle ProzessInfo_1 muss also aus den Benutzerangaben heraus erstellt werden, für jeden Parameter den der Benutzer angelegt hat, muss eine Spalte erzeugt werden.

    Da ich den kompletten Ablauf für das Anlegen eines neuen Prozesses bisher in einer Stored Procedure habe, würde ich auch gerne diese neue Anforderung in diese SP integrieren. Ich habe allerdings das Problem, dass ich nicht weiß wie ich eine variable Anzahl von Parametern als SP-Parameter übergeben kann, bzw. ob das überhaupt möglich ist...
    Die Notlösung wäre eben diese Tabellen vom Code aus (C#) entsprechend der Benutzerangaben anzulegen, aber dann habe ich wieder überall einen Teil vom Code verstreut...

    Hat jemand eine Idee ?

    Danke...

  • #2
    Hallo,

    ich würde die Parameter nicht NEBENeinander sondern hintereinander speicher / verwalten / übergeben.

    Also, einmalig eine Tabelle anlegen z.B. sowas
    [highlight=sql]
    CREATE TABLE Prozess_Parameter
    (
    PPID Bigint Identity(1,1),
    ProzessID Integer NOT NULL,
    Reihenfolge Integer,
    Parametertyp Int (oder Varchar),
    Parameter varchar
    )
    ...
    [/highlight]

    Diese Tabelle füllst du mit den (belibig vielen) Parametern, alle mit gleicher ProzessID (die irgendwie natürlich auch mit verwaltet werden muß - z.B. die PPID des ersten Parameters wiederverwenden).
    Dann rufst du die Prozess - Anlegen - SP mit dieser ProzessID auf und liest dort alle Parameter aus.
    Je nachdem kann man dann dort auch die Parameter gleich wieder aus der Tabelle löschen. Oder über den gesamten Prozeß hinweg über die ProzessID direkt verwenden.

    Wäre so ne Idee von mir.

    Grüße
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.

    Comment


    • #3
      Ich würde für diesen Zweck XML verwenden. Erstens gibt es viele Funktionen in .Net (damit auch für C#) dafür und zweitens gibt es auch im SQL-Server den Datentyp XML (der sich auch als Parameterwert für die stored proc eignet), auf den man mit XQuery losgehen kann. Das wäre meines Erachtens die sauberste Lösung, wenn man sich allerdings mit XML und XQuery bisher noch nicht befasst hat, ist zunächst einiger Einarbeitungsaufwand erforderlich. Allerdings spielt XML heutzutage bereits eine so wichtige Rolle, dass man sich damit sowieso schon mal beschäftigt haben sollte

      bye,
      Helmut

      Comment

      Working...
      X