Auditor Federal de Finanças e Controle - Tecnologia da Informação
Joana trabalha com extração e consolidação de dados e precisa ter acesso aos metadados de um banco de dados SQL Server para compreender melhor o modelo e as estruturas utilizadas.Para começar, Joana resolveu criar uma consulta SQL que produza uma lista das tabelas, com as respectivas colunas com seus tipos de dados e outras propriedades. O comando que Joana deve usar é:
GabaritoD — select s1.name tabela, s2.name coluna,
s3.name tipo, s2.iscomputed, s2.isnullable
from sysobjects s1, syscolumns s2, systypes s3
where s1.xtype='U'
and s1.id=s2.id and s2.xtype=s3.xtype
and s2.xusertype=s3.xusertype
order by s1.name, s2.name
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Metadados de tabelas no SQL Server
Gabarito: letra D. A consulta correta utiliza as tabelas de sistema sysobjects, syscolumns e systypes, filtrando objetos do tipo 'U' (user tables) e realizando a junção por s1.id = s2.id. Essa é a maneira padrão no SQL Server de listar tabelas e suas colunas com metadados como tipo, calculado (iscomputed) e anulável (isnullable).
A questão testa o conhecimento das tabelas do sistema (sysobjects, syscolumns, systypes) e das colunas de junção. No SQL Server:
sysobjects contém todos os objetos do banco (tabelas, views, procedures, etc.). Para tabelas de usuário, xtype = 'U'; objetos do sistema usam 'S'.
syscolumns armazena informações das colunas de cada objeto. A chave estrangeira para sysobjects é id (não xid).
systypes contém os tipos de dados; a ligação com syscolumns é por xtype e xusertype.
Critério
Alternativa A
Alternativa B
Alternativa C
Alternativa D (✅)
Alternativa E
Tabela de objetos
sysobjects
systables (inexistente)
systables (inexistente)
sysobjects
systables (inexistente)
Filtro de tabelas
xtype='T' (inválido)
Nenhum
Nenhum
xtype='U' (correto)
Nenhum
Junção objetos ↔ colunas
s1.xid = s2.xid (inválido)
s1.xcode = s2.xcode (inválido)
s1.tableid = s2.tableid (inválido)
s1.id = s2.id (correto)
s1.xid = s2.xid (inválido)
Junção colunas ↔ tipos
s2.xtype=s3.xtype e s2.xusertype=s3.xusertype (correto)
s2.xtype=s3.xtype e s2.xusertype=s3.xusertype (correto)
s2.xtype=s3.xtype e s2.xusertype=s3.xusertype (correto)
s2.xtype=s3.xtype e s2.xusertype=s3.xusertype (correto)
s2.xtype=s3.xtype e s2.xusertype=s3.xusertype (correto)
Colunas iscomputed/isnullable
s2.iscomputed, s2.isnullable (correto)
s2.iscomputed, s2.isnullable (correto)
s3.iscomputed, s3.isnullable (incorreto)
s2.iscomputed, s2.isnullable (correto)
s2.iscomputed, s2.isnullable (correto)
Alternativa A — ❌ Incorreta
Usa sysobjects com xtype='T' (que no SQL Server não é o código para user tables — 'T' pode ser sistema? Na verdade, 'T' não é padrão. O correto é 'U'). Além disso, a junção usa s1.xid = s2.xid, mas o campo correto é s1.id = s2.id.
Alternativa B — ❌ Incorreta
Utiliza systables, que não é uma tabela de sistema do SQL Server (no SQL Server, as tabelas de sistema são sysobjects, syscolumns, etc.; systables não existe nesse contexto). Também a junção s1.xcode = s2.xcode é inválida.
Alternativa C — ❌ Incorreta
Novamente usa systables (inexistente no SQL Server) e tenta juntar por s1.tableid = s2.tableid, que não são colunas reais. Além disso, s3.iscomputed e s3.isnullable são propriedades de coluna, retiradas indevidamente de systypes (deveriam ser de syscolumns).
Alternativa D — ✅ Correta ⟵ GABARITO
Utiliza as tabelas de sistema corretas: sysobjects (apelido s1) com xtype='U' (filtra apenas tabelas de usuário), syscolumns (s2) e systypes (s3). A junção entre sysobjects e syscolumns é por s1.id = s2.id (correto). As colunas retornadas são: s1.name (tabela), s2.name (coluna), s3.name (tipo), s2.iscomputed, s2.isnullable — todas existentes e corretas.
Alternativa E — ❌ Incorreta
Usa systables (inexistente) e sysobjects como terceira tabela (confusão). A junção s1.xid = s2.xid é inválida; o campo correto para ligar sysobjects e syscolumns é id.
PEGA ESSA DICA!
No SQL Server, memorize as principais tabelas do sistema: sysobjects (objetos), syscolumns (colunas), systypes (tipos), sysindexes, etc. O filtro xtype = 'U' é essencial para tabelas de usuário. Cuidado com xtype='T' — essa letra é usada para objetos do sistema (ex.: 'S' para sistema, 'U' para usuário). A junção correta entre sysobjects e syscolumns é por id.