Estoy tratando de obtener un tipo de columna en el servidor SQL. Sé que esto funciona bien:

SELECT DATA_TYPE
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name';

Pero no funciona con

SELECT DATA_TYPE
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = '[database_name].[dbo].[table_name]' and COLUMN_NAME = 'column_name';

Esto es parte de un procedimiento almacenado que se encuentra en una base de datos diferente y me gustaría poder pasarle el nombre completo de la ruta para que pueda ejecutarse desde la base de datos en la que estoy.

0
Joe 6 mar. 2017 a las 20:28

2 respuestas

La mejor respuesta

Ponga el nombre de la base de datos delante de INFORMATION_SCHEMA como calificador. Si no lo está codificando, deberá usar SQL dinámico. Pero "DbName.INFORMATION_SCHEMA.COLUMNS" lo llevará a la vista correcta del sistema (en el mismo servidor), y luego TABLE_NAME = x y COLUMN_NAME = y lo llevará a la tabla y la columna.

SELECT DATA_TYPE
    FROM THEOTHERDB.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name';
1
pmbAustin 6 mar. 2017 a las 17:30

¡Es al revés! Necesita consultar los objetos de información_esquema en el otro DB

EG SElect * from OtherDB.information_schema.columns

0
john McTighe 6 mar. 2017 a las 17:30