Como eu obteria os nomes de todas as colunas em uma tabela que são de um tipo específico, como datetime?
Melhor ainda - como posso fazer a mesma coisa, mas com várias tabelas unidas e, em seguida, listar o nome da coluna junto com a tabela de onde vem?
Consulta
sys.columns
esys.types
assim:(saída como
schema_name | table_name | column_name | data_type
):Você poderia usar
INFORMATION_SCHEMA.COLUMNS
. A documentação diz queTABLE_SCHEMA
não é confiável para objetos, mas presumo que funcione para tabelas e colunas:Referência: https://msdn.microsoft.com/en-us/library/ms188348.aspx
Para uma determinada tabela...
Isso fornecerá a você na ordem em que estão listados na tabela. Ao usar user_type, você também cobre a possibilidade de tipos de dados criados pelo usuário. Os últimos 3 campos são necessários para tipos de dados que recebem parâmetros extras, por exemplo, VARCHAR(200), NUMERIC(12,3). Se você vir um -1 no campo max_length, provavelmente é algo como VARCHAR(MAX) ou XML.
Para várias tabelas, é complicado. Você pode criar uma tabela a partir de suas tabelas (talvez com um SELECT TOP(0) para não se incomodar em copiar os dados) e, em seguida, conectá-la ao acima. No entanto, se você tiver campos com o mesmo nome nessas tabelas, sua tabela não será criada. Lembre-se de largar sua mesa depois. Você poderia fazer uma tabela temporária, mas é mais difícil encontrar o object_id para eles.
Você pode fazer desta forma: