Ir para conteúdo
Fórum Script Brasil
  • 0

[Resolvido]Retornar o registro uma unica vez.


olimpia

Pergunta

Olá pessoal.

Tenho um select que retorna informações dos campos de uma determinada tabela.

Mas o problema que esta retornando varias registro para o mesmo campo da tabela.

SELECT t1.COLUMN_NAME, t2.CONSTRAINT_NAME
FROM  INFORMATION_SCHEMA.COLUMNS t1 left JOIN   information_schema.key_column_usage t2 
on (t2.table_name COLLATE Latin1_General_CI_AI = t1.table_name COLLATE Latin1_General_CI_AI) AND
(t2.COLUMN_NAME = t1.COLUMN_NAME)
where t1.table_name = 'cliente' 
order by t1.ordinal_position
Resultado
COLUMN_NAME         CONSTRAINT_NAME
------------------- --------------------------
CodEmp              FK_Cliente_Filial
CodEmp              PK_Table_2
CodFil              FK_Cliente_Filial
CodFil              PK_Table_2
Id                  PK_Table_2
Descricao           NULL
DataCadastro        NULL
Telefone            NULL
Cep                 NULL
UfId                FK_Cliente_Uf
Grupo               FK_Cliente_GrupoCliente
Endereco            NULL
Numero              NULL
Gostaria de fosse retornado somente um vez cada column_name, conforme o exemplo abaixo
COLUMN_NAME         CONSTRAINT_NAME
------------------- --------------------------
CodEmp              PK_Table_2
CodFil              PK_Table_2
Id                  PK_Table_2
Descricao           NULL
DataCadastro        NULL
Telefone            NULL
Cep                 NULL
UfId                FK_Cliente_Uf
Grupo               FK_Cliente_GrupoCliente
Endereco            NULL
Numero              NULL

Alguém tem algum dica do que pode ser alterado nesta select para obter o resultado acima ?

Editado por olimpia
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Na realidade a select é bem maior, mas fazendo select por select verifique a select do primeiro post que é responsavel pela repetição.

Utilizo CONSTRAINT_NAME para saber se o campo é chave primaria ou não.

Segue abaixo o select completo

SELECT t3.objname as IdCampo, t1.DATA_TYPE as DataType, t3.value as DescricaoCampo, isnull(t4.CONSTRAINT_TYPE,'false') as ConstraintType 
FROM  INFORMATION_SCHEMA.COLUMNS t1 left join information_schema.key_column_usage t2 
on (t1.table_name COLLATE Latin1_General_CI_AI = t2.table_name COLLATE Latin1_General_CI_AI) 
AND (t1.column_name COLLATE Latin1_General_CI_AI = t2.column_name COLLATE Latin1_General_CI_AI) 
left join ::fn_listextendedproperty (null, 'user', 'dbo','table','cliente','column',default) t3 
on t1.column_name COLLATE Latin1_General_CI_AI = t3.objname COLLATE Latin1_General_CI_AI 
left join information_schema.TABLE_CONSTRAINTS as t4 
on (t4.table_name COLLATE Latin1_General_CI_AI = t2.table_name COLLATE Latin1_General_CI_AI)
AND (t4.CONSTRAINT_NAME COLLATE Latin1_General_CI_AI = t2.CONSTRAINT_NAME COLLATE Latin1_General_CI_AI) 
where t1.table_name = 'cliente' order by t1.ordinal_position
Resultado
IdCampo        DataType    DescricaoCampo                       ConstraintType                                                                       ---------------- ----------- ------------------------------------ --------------
CodEmp         int         Empresa;Código da Empresa            FOREIGN KEY
CodEmp         int         Empresa;Código da Empresa            PRIMARY KEY
CodFil         int         Filial;Código da Filial              FOREIGN KEY
CodFil         int         Filial;Código da Filial              PRIMARY KEY
Id             int         Código;Identificação do Cliente      PRIMARY KEY
Descricao      varchar     Razão Social;Razão Social do Cliente false
DataCadastro   datetime    Data Cadastro;Data de cadastro       false
Telefone       nchar       Telefone.;Telefone do Cliente        false
Cep            nchar       CEP.;CEP                             false
UfId           nchar       Uf;Unidade de Federação              FOREIGN KEY
Grupo          int         Grupo;Grupo de Cliente               FOREIGN KEY
Endereco       varchar     Endereço;Endereço do Cliente         false
Numero         int         Numero;Numero do Endereço            false
Preciso que o resultado desta select seja este abaixo
IdCampo        DataType    DescricaoCampo                       ConstraintType                                                                       ---------------- ----------- ------------------------------------ --------------
CodEmp         int         Empresa;Código da Empresa            PRIMARY KEY
CodFil         int         Filial;Código da Filial              PRIMARY KEY
Id             int         Código;Identificação do Cliente      PRIMARY KEY
Descricao      varchar     Razão Social;Razão Social do Cliente false
DataCadastro   datetime    Data Cadastro;Data de cadastro       false
Telefone       nchar       Telefone.;Telefone do Cliente        false
Cep            nchar       CEP.;CEP                             false
UfId           nchar       Uf;Unidade de Federação              FOREIGN KEY
Grupo          int         Grupo;Grupo de Cliente               FOREIGN KEY
Endereco       varchar     Endereço;Endereço do Cliente         false
Numero         int         Numero;Numero do Endereço            false

Alguma dica ?

Link para o comentário
Compartilhar em outros sites

  • 0

No fim da query agrupe os campos: DataType e DescricaoCampo.

...
GROUP BY DataType, DescricaoCampo
Lá em cima na projeção voce deve específicar alguma função de agrupamento para o campo CONSTRAINT_TYPE Nesse caso o MAX resolve.
... MAX(CONSTRAINT_TYPE)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...