Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2022

Banco de DadosSQL
Código
fg047173
Banca
FGV
Órgão
CGU
Ano
2022
Nível
Superior
Cargo
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 é:
  1. Aselect s1.name tabela, s2.name coluna,s3.name tipo, s2.iscomputed, s2.isnullablefrom sysobjects s1, syscolumns s2, systypes s3where s1.xtype='T'and s1.xid=s2.xid and s2.xtype=s3.xtypeand s2.xusertype=s3.xusertypeorder by s1.name, s2.name
  2. Bselect s1.name tabela, s2.name coluna,s3.name tipo, s2.iscomputed, s2.isnullablefrom systables s1, syscolumns s2, systypes s3where s1.xcode=s2.xcode and s2.xtype=s3.xtypeand s2.xusertype=s3.xusertypeorder by s1.name, s2.name
  3. Cselect s1.name tabela, s2.name coluna,s3.name tipo, s3.iscomputed, s3.isnullablefrom systables s1, syscolumns s2, systypes s3where s1.tableid=s2.tableid and s2.xtype=s3.xtypeand s2.xusertype=s3.xusertypeorder by s1.name, s2.name
  4. Dselect s1.name tabela, s2.name coluna,s3.name tipo, s2.iscomputed, s2.isnullablefrom sysobjects s1, syscolumns s2, systypes s3where s1.xtype='U'and s1.id=s2.id and s2.xtype=s3.xtypeand s2.xusertype=s3.xusertypeorder by s1.name, s2.name
  5. Eselect s1.name tabela, s2.name coluna,s3.name tipo, s2.iscomputed, s2.isnullablefrom systables s1, syscolumns s2, sysobjects s3where s1.xid=s2.xid and s2.xtype=s3.xtypeand s2.xusertype=s3.xusertypeorder by s1.name, s2.name
Revelar gabarito e comentário

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.

Gabarito: letra D.

Link permanente: /questoes/fg047173