Announcement

Collapse
No announcement yet.

Spalte zu View hinzufügen

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

  • Spalte zu View hinzufügen

    Hallo zusammen,

    habe folgendes Problem, arbeite beruflich mit Prozessleitsystemen. Hierbei muss ich die Alarme und Meldungen eines PLS mit einer Software abgreifen. Die Daten enstammen einer SQL Datenbank.

    Dort werden soweit ich das verstanden habe wird eine View temporär erzeugt und die Daten dorthin aus anderen Tables hineingschrieben.

    Der Code sieht folgendermassen aus:

    Code:
    SELECT @SQL = 'CREATE VIEW '+@ViewName+' AS '+ CHAR(13) + CHAR(10)
     
    DECLARE AMT_Cursor CURSOR FOR SELECT DSN FROM AMT WHERE Type =@Typ ORDER BY Start DESC 
     
    OPEN AMT_Cursor
    FETCH NEXT FROM AMT_Cursor INTO @DSN
    SELECT @ArchiveCount = 0
    WHILE(@@FETCH_STATUS = 0 AND @ArchiveCount < 250)
    BEGIN
       IF( @ArchiveCount > 0 )
         SELECT @SQL = @SQL + 'UNION ALL ' + CHAR(13) + CHAR(10)
       SELECT @SQL = @SQL + 'SELECT * FROM [' + LTRIM(RTRIM(@DSN)) + '].[dbo].['+@ViewName+'] ' + CHAR(13) + CHAR(10)
    	 SELECT @ArchiveCount = @ArchiveCount+1
     
       FETCH NEXT FROM AMT_CURSOR INTO @DSN
    END
    IF( @ArchiveCount > 0 )	EXEC( @SQL )
     
    CLOSE AMT_Cursor
    DEALLOCATE AMT_Cursor

    ICh muss hierbei noch der View eine zusatzliche Spalte mit der Bezeichnung "ID" hinzufügen, die gleichzeitig auch der Primary Key sein soll.

    Kann mir hier jemand weiterhelfen?

    Danke schonmal im voraus

  • #2
    Hallo LeithnJ,

    soweit ich das verstanden habe wird eine View temporär erzeugt
    Das stimmt sowie.
    Daten dorthin aus anderen Tables hineingschrieben
    Das nicht, sie werden über das View "angezeigt" (selektiert).

    Das Statement holt zunächst mit "SELECT DSN FROM AMT" die Tabellennamen, die für das View benötigt werden.
    Mit 'UNION ALL ' werden dann alle Tabellen zu einer Abfrage kombiniert.
    Mittels 'SELECT * FROM [' + LTRIM(RTRIM(@DSN))" werden bereits alle Felder der Tabellen selektiert.

    Dem View kannst Du in dem (Deinem) Sinne kein Feld hinzufügen, das müsste über die zugrundelegende Tabellen erfolgen => Wende Dich da lieber an den DBA.
    Eine Unique ID über allen dynamisch kombinierte Tabellen wird schwierig.

    Was noch ginge, wäre im View eine RowNumber (ab MS SQL 2005) als laufende Zeilennummer einzubauen, die wäre aber aber nur das aktuelle Snapshot gültig/eindeutig, bei der nächsten Abfrage wird sie neu aufgebaut und wäre nie reproduzierbar.
    Das könnte somit der Client ebenso erzeugen.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      ok ich glauba ich habe da was missverstanden.

      Kann ich aus einer View heraus einen table erzeugen, und dort dann die Spalte ID hinzufügen?

      Wenn ich ein table erzeuge -> mit einer stored procedure -> wie mach ich es dann das dieser table immer auf dem aktuellen Stand ist?


      Es hat sich noch ein Problem ergeben ->

      ich habe ein table das ich 1:1 kopieren will (weil ich dieses nicht verandern darf) und dort auch eine Spalte hinzufügen.
      Wie schaffe ich das dieses Table wirklich immer "up to date" ist.,

      Comment


      • #4
        Man kann recht einfach mit

        SELECT *
        INTO NeueTabelle
        FROM ViewName

        eine neue Tabelle anlegen, die das gleiche Design/Felder hat wie das View.
        Der kann man dann auch ein neues Feld hinzufügen.

        Nur wie Du die neuen Tabelle "up-to-date" halten kannst, das ist nicht so einfach.
        Dazu musst Du zunächst das Design der zugrundliegenden Tabellen kennen inkl. PK.

        Beim View kommt hinzu, das (vermutlich) nicht nachvollzogen werden kann, aus welcher der beteiligten Tabellen die Daten stammen; also woher die Daten zum aktualisieren beziehen?

        Das ist kein einfaches Unterfangen.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment

        Working...
        X