SELECT Object_Schema_name(c.object_id) as [SCHEMA_NAME]
,object_NAME(c.object_id) AS TABLE_NAME
,c.NAME AS COLUMN_NAME
,t.NAME AS DATA_TYPE
-- add / remove columns as per need
--,c.max_length AS MAX_LENGTH
FROM sys.all_columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
where Object_Schema_name(c.object_id) <> 'sys' -- not sys schema
-- filters
and t.name = 'Datetime'
-- and object_NAME(c.object_id) = 'someTableName'
SELECT sc.name AS column_name, t.name AS data_type, t.max_length, t.[precision], t.scale
FROM sys.columns sc
INNER JOIN sys.types t ON sc.user_type_id = t.user_type_id
WHERE sc.object_id = OBJECT_ID('AdventureWorks2012.Person.Person')
ORDER BY sc.column_id
SELECT COLUMN_NAME FROM user_tab_columns WHERE
table_name = 'MYTABLE' AND DATA_TYPE = 'DATE'
SELECT TABLE_NAME, COLUMN_NAME FROM user_tab_columns
WHERE DATA_TYPE = 'DATE'
sys.columns
像这样查询sys.types
:(输出为
schema_name | table_name | column_name | data_type
):你可以使用
INFORMATION_SCHEMA.COLUMNS
. 文档说这TABLE_SCHEMA
对对象不可靠,但我认为它适用于表和列:参考: https ://msdn.microsoft.com/en-us/library/ms188348.aspx
对于给定的表...
这将按照它们在表中列出的顺序为您提供它们。通过使用 user_type,您还可以了解用户创建数据类型的可能性。采用额外参数的数据类型需要最后 3 个字段,例如 VARCHAR(200)、NUMERIC(12,3)。如果您在 max_length 字段中看到 -1,那么它可能类似于 VARCHAR(MAX) 或 XML。
对于多个表,这很棘手。您可以从您的表中创建一个表(可能使用 SELECT TOP(0) 以免打扰复制数据),然后将其插入上面。但是,如果您在这些表中具有相同名称的字段,则不会创建您的表。记得之后放下你的桌子。你可以做一个临时表,但他们很难找到 object_id 。
你可以这样做: