Announcement

Collapse
No announcement yet.

Metainformationen - Spalten in Views

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

  • Metainformationen - Spalten in Views

    Hallo zusammen,

    ich habe ein Problem mit den Metainformationen von Views im SQL Server 2008 (ohne R2). Und zwar soll ich herausfinden, von welcher Tabelle und welcher Tabellenspalte die Felder einer View sind.

    Beispiel:
    Die Tabellen:
    Code:
    CREATE TABLE [TB_STD_INSTRUMENT]
    (
    	[INSTR_WKN_ID_PID] [int] NOT NULL,    -- PK
    	[INSTT_ID] [int] NULL,
    	[PRODT_ID] [int] NULL,                           -- FK auf TB_STD_PRODUCT_TYPE
    	[OPTT_ID] [int] NULL,                              -- FK auf TB_STD_OPTION_TYPE
    	[UPD_USER] [nvarchar](64) NOT NULL
    )
    
    
    CREATE TABLE [TB_STD_OPTION_TYPE]
    (
    	[OPTT_PID] [int] NOT NULL,                    -- PK
    	[OPTT_NAME] [nvarchar](50) NOT NULL
    )
    
    
    CREATE TABLE [TB_STD_PRODUCT_TYPE]
    (
    	[PRODT_PID] [int] NOT NULL,                 -- PK
    	[PRODT_NAME] [nvarchar](50) NOT NULL
    )
    Die View:
    Code:
    CREATE VIEW [VW_TEST3]
    AS
    SELECT	i.INSTR_WKN_ID_PID AS [INSTR_ID],
    		i.UPD_USER AS [USER],
    		o.OPTT_PID AS [OPT_ID],
    		o.OPTT_NAME AS [OPT_NAME],
    		p.PRODT_PID AS [PROD_ID],
    		p.PRODT_NAME AS [PROD_NAME]
    
    FROM	QLP.TB_STD_INSTRUMENT i
    
    INNER JOIN QLP.TB_STD_OPTION_TYPE o
    ON o.OPTT_PID = i.OPTT_ID
    
    INNER JOIN QLP.TB_STD_PRODUCT_TYPE p
    ON p.PRODT_PID = i.PRODT_ID
    Ich habe jetzt schon einige Views mit Metadaten durchprobiert, auch sys.dm_sql_referenced_entities oder sys.columns/sys.tables, aber bekomme einfach nicht heraus daß z.B. die Spalte OPT_ID der View eigentlich TB_STD_OPTION_TYPE.OPTT_PID ist.

    Hat mir jemand eine Lösung oder einen Hinweis, oder geht das, was ich hier machen soll, überhaupt nicht?

    Gruß,
    Martin

  • #2
    Hallo Martin,

    das kannst Du über sys.sql_dependencie ermitteln.
    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
      Hallo Oliver,

      danke, aber entweder ist noch zu früh am morgen und ich versteh's nicht, oder die Spalte is_select_all ist entgegen der Dokumentation tatsächlich immer 0. Jedenfalls krieg ich beim Testen zwar raus, welche Tabellenspalten von der View verwendet werden, aber nicht welche davon in der SELECT-Liste angesprochen werden.

      Gruß,
      Martin

      Comment


      • #4
        Bei mir liefert es richtige Ergebnisse, allerdings verwende ich nie SELECT *; entsprechend sind bei mir die Spalten mit is_selected geflagt.

        [highlight=SQL]
        SELECT OBJ.name as ObjectName
        ,REF.name as RefObjName
        ,COL.name AS ColumnName
        ,DEP.is_selected
        ,DEP.is_select_all
        ,DEP.is_updated
        ,DEP.class_desc
        FROM sys.sql_dependencies AS DEP
        INNER JOIN
        sys.objects as OBJ
        ON DEP.object_id = OBJ.object_id
        INNER JOIN
        sys.objects as REF
        ON DEP.referenced_major_id = REF.object_id
        LEFT JOIN
        sys.columns as COL
        ON DEP.referenced_major_id = COL.object_id
        AND DEP.referenced_minor_id = COL.column_id
        WHERE DEP.class <= 1
        AND OBJ.type = 'V '
        ORDER BY OBJ.name
        ,COL.column_id
        [/highlight]
        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


        • #5
          Durchaus. Mit SELECT * arbeite ich auch nicht. Aber bei mir kommen da alle beteiligten Spalten, auch die Spalten, die ich nur in den Bedingungen für JOIN benutze. Im Beispiel eingangs also auch OPTT_ID und PRODT_ID der Tabelle QLP.TB_STD_INSTRUMENT, sowie QLP.TB_STD_OPTION_TYPE.OPTT_PID und QLP.TB_STD_PRODUCT_TYPE.PRODT_PID. Die Spalten sind aber nicht in der SELECT-Liste. Das müsste ich unterscheiden können.

          Leider kann ich die Spezifikation nicht ändern, mein Kollege hat auf stur geschaltet

          Gruß,
          Martin

          Comment

          Working...
          X