2016-04-30 7 views
4

Mit der Tabelle Clients.Wie Abfrage Tabellendaten von Objekt-ID und Spalten-ID?

PK LastName Name  Address 
1 Vidal  Arturo  St.... 
2 Lavezzi  Ezequiel St.... 
3 Cuadrado Guillermo St.... 

Ich möchte bekommen:

Desired Table

Mit der folgenden Abfrage gibt mir die ersten vier Spalten, aber wie kann ich diese Verknüpfung mit den Tabellendaten?

SELECT TAB.object_id OBEJCTID, TAB.name TABLENAME, COL.column_id COLUMNID, COL.name FROM sys.tables TAB 
JOIN SYS.columns COL 
ON TAB.object_id = COL.object_id 
WHERE TAB.object_id = 25659888; 
+0

könnten Sie bitte etwas mehr auf die Produktion erklären? – TheGameiswar

Antwort

3

Sie müssen unpivot die Daten.

Probieren Sie etwas wie dieses

;WITH cte 
    AS (SELECT column_name, 
       table_value 
     FROM clients 
       CROSS apply (VALUES ('pk',CONVERT(varchar(20),PK)), 
            ('LastName',lastname), 
            ('Name', NAME), 
            ('Address',address)) cs(column_name, table_value)), 
    yourquery 
    AS (SELECT TAB.object_id OBEJCTID, 
       TAB.NAME  TABLENAME, 
       COL.column_id COLUMNID, 
       COL.NAME 
     FROM sys.tables TAB 
       JOIN sys.columns COL 
        ON TAB.object_id = COL.object_id 
     WHERE TAB.object_id = 25659888) 
SELECT * 
FROM cte c 
     JOIN yourquery y 
     ON y.NAME = c.column_name 
0

Ein weiterer Ansatz, hier müssen Sie alle Spalten in einen Typ zu konvertieren, zum Beispiel I int in varchar konvertieren (50), alle anderen Spalten in meiner Tabelle sind varchar (50) eather:

SELECT TAB.name TableName, 
     TAB.object_id ObjectId, 
     COL.name ColumnName, 
     COL.column_id ColumnId, 
     U.ColumnValue TableValue, 
     T.name TableType 
FROM sys.tables TAB 
INNER JOIN SYS.columns COL 
    ON TAB.object_id = COL.object_id 
INNER JOIN sys.types T 
    ON T.user_type_id = COL.system_type_id 
INNER JOIN (
     SELECT ColumnName, ColumnValue 
     FROM (SELECT CONVERT(varchar(50),PK) as PK , LastName, Name, [Address] 
      --here to convert all in one type 
     FROM Clients) 
     AS P 
     UNPIVOT 
     (
      ColumnValue FOR ColumnName IN (PK, LastName, Name, [Address]) 
     ) as unpvt 
    ) as U 
    ON U.ColumnName = COL.name 
WHERE TAB.object_id = 25659888; 

Ausgang:

TableName ObjectId ColumnName ColumnId TableValue TableType 
Clients  25659888 PK   1   1   int 
Clients  25659888 LastName 2   Vidal  varchar 
Clients  25659888 Name  3   Arturo  varchar 
Clients  25659888 Address  4   St....  varchar 
Clients  25659888 PK   1   2   int 
Clients  25659888 LastName 2   Lavezzi  varchar 
Clients  25659888 Name  3   Ezequiel varchar 
Clients  25659888 Address  4   St....  varchar 
Clients  25659888 PK   1   3   int 
Clients  25659888 LastName 2   Cuadrado varchar 
Clients  25659888 Name  3   Guillermo varchar 
Clients  25659888 Address  4   St....  varchar 
Verwandte Themen