sql-server-2005 - tablas - buscar una tabla en todas las bases de datos sql
Consulta para encontrar todas las tablas con columnas de fecha en ella (5)
Esto debería ser el truco, solo agrega tipos adicionales si los necesitas:
select
so.name table_name
,sc.name column_name
,st.name data_type
from sysobjects so
inner join syscolumns sc on (so.id = sc.id)
inner join systypes st on (st.type = sc.type)
where so.type = ''U''
and st.name IN (''DATETIME'', ''DATE'', ''TIME'')
editar: esto también funciona en Sybase y en cualquier otra variante de T-SQL.
¿Alguien me puede dejar saber la consulta para encontrar todas las tablas que tienen una fecha de columnas en ella?
Gracias
Utiliza INFORMATION_SCHEMA en tablas en la base de datos actual.
Probado en SQL Server 2008.
select distinct c.TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS as c
where c.DATA_TYPE = ''datetime''
Otra consulta para SQL 2005/2008 utilizando vistas de sistema:
select tbl.name as ''Table'', c.name as ''Column Name'', t.name as ''Type''
from sys.columns as c
inner join sys.tables as tbl
on tbl.object_id = c.object_id
inner join sys.types as t
on c.system_type_id = t.system_type_id
where t.name in (''datetime'', ''date'')
order by tbl.name
Sé que esta es una pregunta antigua, pero la encontré buscando una solución de problema similar.
Esto que estoy usando:
SELECT
DISTINCT OBJECT_NAME(col.OBJECT_ID) AS [TableName]
FROM
sys.all_columns col
INNER JOIN sys.types typ
ON col.user_type_id = typ.user_type_id
WHERE
col.user_type_id IN (61)
Puede encontrar todos los tipos de datos básicos aquí: http://www.sqlservercurry.com/2008/06/find-all-columns-with-varchar-and.html
Si desea encontrar todas las columnas con un tipo específico en una tabla específica, simplemente use esto:
SELECT
OBJECT_NAME(col.OBJECT_ID) AS [TableName]
,col.[name] AS [ColName]
,typ.[name] AS [TypeName]
FROM
sys.all_columns col
INNER JOIN sys.types typ
ON col.user_type_id = typ.user_type_id
WHERE
col.user_type_id IN (61)
AND
OBJECT_NAME(col.OBJECT_ID) = ''TABLE_NAME''
Mayby alguien lo encontrará útil :)
Leve mejora a la consulta de RobS anterior. Esta también devuelve la columna del nombre del esquema.
select s.name as ''SchemaName'',
tbl.name as ''Table'', c.name as ''Column Name'', t.name as ''Type''
from sys.columns as c
inner join sys.tables as tbl
on tbl.object_id = c.object_id
inner join sys.types as t
on c.system_type_id = t.system_type_id
inner join sys.schemas s
on tbl.schema_id = s.schema_id
where t.name in (''datetime'', ''date'')
order by s.name, tbl.name
Aquí hay otro juego de la respuesta de RobS que obtendrá todos los diferentes formatos de fecha y formatos de tiempo desde la introducción de fecha, fechahora2 y hora que se introdujeron.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE LIKE ''%date%'' OR DATA_TYPE LIKE ''%time%''
Probado en SQL Server 2012 y 2014 pero debería funcionar en 2003, 2005, 2008 y muchas conexiones ODBC también.