2016-07-08 8 views
0

Ich versuche, Namen von Spalten mit einem bestimmten Typ zu bekommen (so kann ich das Ergebnis dynamisch abfragen). Code unten scheint mich nahe zu bekommen (mit d. H. Typ = 56 steht für int), aber es scheint nur inkorrekt zu sein. Ganz zu schweigen davon, dass ich keine gute Zuordnung von Typ zu Int-Darstellung gefunden habe.T-SQL bekomme Spalten spezifischen Typs

SELECT c.system_type_id as type 
FROM SYS.COLUMNS c 
JOIN SYS.TABLES t ON c.object_id = t.object_id 
WHERE t.name = 'MyTableName' 

Dank

+2

Sofern Sie uns nicht sagen, was mit Ihrer Anfrage nicht stimmt, können wir Ihnen nicht sehr helfen. – RBarryYoung

+1

Was genau versuchen Sie zu bekommen? Was ist spezifisch falsch mit der Abfrage, die Sie verwenden? Bitte sehen Sie http://StackOverflow.com/Help/how-to-ask –

+0

Ich wollte die Zuordnung mit dem Typnamen (d. H. 56 = 'int') erhalten. JPW hat mich bereits angewiesen, wie man es bekommt. – Gutek

Antwort

1

Sie die Zuordnung zu Typen in der sys.types Katalogsicht finden:

SELECT c.name as column_name, ty.name as type_name 
FROM SYS.COLUMNS c 
JOIN SYS.TABLES t ON c.object_id = t.object_id 
JOIN SYS.TYPES ty ON c.system_type_id = ty.system_type_id 
WHERE t.name = 'MyTableName' 
0
SELECT 
    c.name 'Column Name', 
    t.Name 'Data type' 
FROM  
    sys.columns c INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id 
LEFT OUTER JOIN  sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id 
LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id 
WHERE 
    c.object_id = OBJECT_ID('TableName') 
0

Angenommen, Sie verwenden SQL Server du so etwas tun kann;

DECLARE @DataType varchar(20); SET @DataType = 'int' 

SELECT 
    o.name TableName 
    ,c.name ColumnName 
    ,t.name ColumnType 
    ,t.max_length ColumnLength 
FROM sys.columns c 
JOIN sys.objects o 
    ON c.object_id = o.object_id 
JOIN sys.types t 
    ON c.user_type_id = t.user_type_id 
WHERE t.name LIKE '%' + @DataType + '%' 
    AND o.type_desc = 'USER_TABLE' 

nur den Datentyp in der Variablen ändern und es wird Ihnen eine Liste wie diese

TableName ColumnName ColumnType ColumnLength 
Employees empid  int   4 
Employees mgrid  int   4 
Suppliers supplierid int   4 
Categories categoryid int   4 
Products productid int   4 
Products supplierid int   4 

Sie diese ändern können in den Tabellennamen hinzufügen, wenn das ist, was Sie tun möchten.

Verwandte Themen