Announcement

Collapse
No announcement yet.

SQL Function

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

  • SQL Function

    Hey...habe mal eine Frage...
    ist folgendes möglich:
    wenn eine neue Tabelle erzeugt wird z.B. mit dem Namen "dtEvent_123456789" soll automatisch eine variable erzeugt werden (wo auch immer) mit dem namen "dtEvent" , und das immer wenn eine tabelle mit einem Namen like "dtEven_xxxxxxxx" erzeugt wird....d.h. die variable hat mehrere werte wenn das möglich ist. D.h. z.B. $dtEvent = dtEvent_123456789 & dt_event_1234567891

    Gruß

  • #2
    Hi,

    im SQL Server 2005 gibt es DDL-Trigger, die z.B. ausgelöst werden, wenn eine neue Tabelle erzeugt wird.

    Wie allerdings eine Variable mehrere Werte annehmen soll, musst Du Dir selbst überlegen. Meines Erachtens nach ist die Speicherung, wie Du sie vorhast vorsichtig ausgedrückt "unglücklich".
    Vielleicht überlegst Du Dir, ob Du die einzelnen Werte nihct besser in einer Tabelle speicherst.
    Dann wäre auch der Zugriff deutlich einfacher...

    Gruß,
    Karsten

    Comment


    • #3
      re

      Hey danke für die Antwort, habe mir auch scho etwas anderes überlegt und es hat auch funktioniert ;-).

      Aber habe da ein neues Problem...wie kann ich eine Abfrage in etwa so schreiben:

      Code:
      SELECT
      		dtEvent.EventNo as "Event ID:",
      		dtEvent.creationtime as "Erstellt am:",
      		dtPrincipal.struser AS "User Account:"
      					
      FROM 
      
      		LIKE '%dtEvent%' AS dtEvent,
      		dtMachine,
      		LIKE '%dtPrincipal%' AS dtPrincipal
      			
      WHERE
      
      		dtMachine.id = dtEvent.agentmachineid
      		AND dtPrincipal.id = dtEvent.clientuserid
      		AND dtEvent.eventno IN ('628')
      Das Problem liegt bei dem "FROM" teil: da wo ich: LIKE '%%' geschrieben habe muss es eine andere Lösung für geben, weil so geht es ja nicht wirklich.
      Gruß

      Comment


      • #4
        Hi,
        ich begreif' nicht ganz, was da passieren soll
        Wovon selektierst Du denn?
        Du musst doch wenigstens eine Basis-Menge haben, von der Du mit einem Select-Befehl Deine Rückgabe-Menge bestimmen willst???
        Schau Dir doch mal die Syntax des SELECT-Befehls an http://msdn2.microsoft.com/de-de/library/ms190617.aspx

        Falls Du eine Konstuktion gewählt hast, wie in Deinem Ursprungsposting beschrieben ( "$dtEvent = dtEvent_123456789 & dt_event_1234567891" ), musst Du mit String-Funktionen arbeiten, um die Daten zu extrahieren

        HTH,
        Karsten

        Comment


        • #5
          re

          Hi, mein problem ist, dass ich den genauen Namen der Tabelle gar nicht weiß, da jeden Tag eine neue erzeugt wird mit einem anderen Namen, ich weiß nicht wie ich etwas abfragen, vondem ich noch gar nicht weiß wie es morgen oder so heißt, vllt. ist es ja möglich mehrere Tabellen mit dem anfangenen Namen "dtEvent" gleichzeitig abzufragen, dann brauch ich den namen ja gar nicht.

          Gruß

          Comment


          • #6
            Hi,

            wenn ich Dich richtig verstehe, musst Du nicht direkt nach der Erzeugung der neuen Tabelle, Deine Arbeit durchführen.
            Dann kannst Du im Prinzip auch folgendes machen:
            Code:
            select * from INFORMATION_SCHEMA.TABLES where Table_name like 'dtEvent_%'
            Nach Erledigung Deiner Arbeit merkst Du Dir dann einfach, welche Tabelle bereits "bearbeitet" worden ist und beim nächsten Lauf kannst Du Dir die Tabellen heraussuchen, die neu sind...

            (auch wenn der DDL-Trigger natürlich eleganter ist )

            HTH,
            Karsten
            Zuletzt editiert von Rumtata; 05.02.2008, 10:47. Reason: kurze Bemerkung

            Comment


            • #7
              Hey

              Danke, aber glaube das bringt mich noch nicht weiter, aber hier mal ein anderer Lösungsansatz von mir...

              Ich brauche das ergebnis der Abfrage (die PartitionID)


              Code:
              SELECT dtPartition.partitionid FROM dtPartition WHERE dtPartition.status like ('0')
              Ergebnis aus dtPartition = "c34f5321_95d9_41fc_b98a_192eda1ea0d3"


              aber jetzt kommt mein Problem wie soll ich vor der ID folgendes schreiben:
              dtEvent_HierDieID also sprich dtEvent_c34f5321_95d9_41fc_b98a_192eda1ea0d3

              und zwar in einer abfrage die so lautet:


              Code:
              SELECT
              		dtEvent.EventNo as "EventID:",
              		dtPrincipal.struser as "Benutzer:",
              		
              FROM 
              
              		dtEvent_HierDieIDderAbfrage1 AS dtEvent,
              		dtMachine,
              		dtPrincipal_HierDieGleicheID AS dtPrincipal	
              			
              WHERE
              
              		dtMachine.id = dtEvent.agentmachineid
              		AND dtPrincipal.id = dtEvent.primaryuserid
              		AND dtEvent.eventno IN ('529')
              Geht das mit einer Funktion oder wie auch immer??? Einer ne Idee?

              Comment


              • #8
                Ahh, jetzt ja, eine Insel. Ich verstehe - dynamischer SQL-Befehl.

                Das kannst Du mit dem EXECUTE - Befehl machen, der einen String ausführen kann:
                Code:
                declare @sqltext nvarchar(max), @tablename nvarchar(max);
                
                set @tablename = N'c34f5321_95d9_41fc_b98a_192eda1ea0d3'
                Set @sqltext = N'select * from ' + @tableName
                
                execute ( @sqltext )
                Musst Du halt noch für Dein Select anpassen ...

                Jetzt richtig ?
                Karsten

                Comment


                • #9
                  öhm

                  Hi du, danke für die Antworten usw...
                  ehrlich gesagt komme ich jetzt ein wenig durcheinander mit deinem Code ...
                  Mag sein das du grad das richtige meinst, aber verstehen tu ich das grad leider nicht so wirklich....

                  Geht das nicht irgendwie so:



                  declare @table1 nvarchar(max);
                  declare @table2 nvarchar(max);

                  Set @table1 = (SELECT dtPartition.partitionid FROM dtPartition WHERE dtPartition.status like ('0'))
                  Set @table2 = (SELECT dtPartition.partitionid FROM dtPartition WHERE dtPartition.status like ('0'))


                  SELECT

                  dtEvent.EventNo as "Event ID:",
                  dtEvent.creationtime as "Erstellt am:",
                  dtPrincipal.struser AS "User Account:",
                  dtMachine.description AS "Computer:",


                  FROM

                  (dtEvent_+@table1) AS dtEvent,
                  dtMachine,
                  (dtprincipal_+@table2) AS dtPrincipal,


                  WHERE

                  dtMachine.id = dtEvent.eventmachineid
                  AND dtPrincipal.id = dtEvent.primaryuserid
                  AND dtEvent.eventno IN ('528')





                  Gruß
                  Zuletzt editiert von sql_insider; 05.02.2008, 12:39. Reason: neu

                  Comment

                  Working...
                  X