Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

11 maneiras de recuperar uma chave primária no SQL Server (Exemplos de T-SQL)


Muitas vezes, há muitas maneiras de fazer a mesma coisa (ou semelhante) no SQL Server. Recuperar todas as chaves primárias de um banco de dados (ou mesmo apenas a chave primária de uma determinada tabela) é um exemplo.

Este artigo apresenta onze abordagens diferentes para recuperar informações de chave primária no SQL Server.

Alguns deles serão mais úteis do que outros, dependendo da sua situação exata.


Exemplo 1 – O procedimento armazenado do sistema sp_pkeys


Se você deseja apenas a chave primária de uma determinada tabela, o sp_pkeys procedimento armazenado do sistema é provavelmente a maneira mais rápida e fácil de fazer isso. Para isso, basta passar o nome da tabela para o procedimento.

Assim:
Artistas EXEC sp_pkeys;

Resultado (usando saída vertical):
TABLE_QUALIFIER | MúsicaTABLE_OWNER | dboTABLE_NAME | ArtistasCOLUMN_NAME | ArtistIdKEY_SEQ | 1PK_NAME | PK__Artistas__25706B50FCD918B1

Neste caso, solicitei a chave primária aos Artistas tabela. Ele retorna o nome da chave primária ( PK__Artists__25706B50FCD918B1 ), o nome do banco de dados ( Música ), o nome da tabela, o nome da coluna ( ArtistId ), além de outras informações.

Alternativamente, eu poderia ter especificado explicitamente todos os argumentos para obter o mesmo resultado:
EXEC sp_pkeys @table_name =Artistas, @table_owner =dbo, @table_qualifier =Música;

Exemplo 2 – A visualização do sistema KEY_COLUMN_USAGE


O INFORMATION_SCHEMA.KEY_COLUMN_USAGE a visualização do sistema retorna uma linha para cada coluna que está restrita como chave no banco de dados atual. Portanto, você também receberá chaves estrangeiras retornadas com essa visualização.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

Resultado:
+-------------+---------------+--------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+---------------+---------------- ---------------|| Álbuns | ArtistId | FK_Albums_Artists || Álbuns | GêneroId | FK_Albums_Genres || Álbuns | AlbumId | PK__Albums__97B4BE379FC780BD || Artistas | ArtistId | PK__Artistas__25706B50FCD918B1 || Gêneros | GêneroId | PK__Genres__0385057E88BB96F8 |+--------------+---------------+---------------- ---------------+

Podemos ver que isso retorna as restrições de todas as tabelas. Também podemos adicionar um WHERE cláusula para restringir os resultados a uma tabela específica.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_NAME ='Artistas';

Resultado:
+-------------+---------------+--------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+---------------+---------------- ---------------|| Artistas | ArtistId | PK__Artistas__25706B50FCD918B1 |+--------------+---------------+---------------- ---------------+

Nesses exemplos, reduzi os resultados apenas para as colunas da visualização em que estou interessado, mas você também pode usar o asterisco (* ) curinga para retornar todas as colunas.
SELECT *FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_NAME ='Artistas';

Resultado (usando saída vertical):
CONSTRAINT_CATALOG | MúsicaCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Artists__25706B50FCD918B1TABLE_CATALOG | MúsicaTABLE_SCHEMA | dboTABLE_NAME | ArtistasCOLUMN_NAME | ArtistIdORDINAL_POSITION | 1

Exemplo 3 – A visualização do sistema CONSTRAINT_COLUMN_USAGE


Isso é semelhante ao exemplo anterior. O INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE a visualização do sistema retorna uma linha para cada coluna no banco de dados atual que possui uma restrição definida na coluna. Assim como com INFORMATION_SCHEMA.KEY_COLUMN_USAGE você também receberá chaves estrangeiras retornadas com essa visualização. No entanto, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE não se limita apenas às principais restrições.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;

Resultado:
+-------------+---------------+--------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+---------------+---------------- ---------------|| Álbuns | ArtistId | FK_Albums_Artists || Álbuns | GêneroId | FK_Albums_Genres || Álbuns | AlbumId | PK__Albums__97B4BE379FC780BD || Artistas | ArtistId | PK__Artistas__25706B50FCD918B1 || Gêneros | GêneroId | PK__Genres__0385057E88BB96F8 |+--------------+---------------+---------------- ---------------+

Você pode usar um WHERE cláusula para retornar apenas uma tabela ou coluna específica:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEWHERE COLUMN_NAME ='ArtistId';

Resultado:
+-------------+---------------+--------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+---------------+---------------- ---------------|| Álbuns | ArtistId | FK_Albums_Artists || Artistas | ArtistId | PK__Artistas__25706B50FCD918B1 |+--------------+---------------+---------------- ---------------+

Nesse caso, especifiquei um nome de coluna, então ele retornou todas as restrições nas colunas com esse nome. Acontece que o banco de dados usa o mesmo nome de coluna em duas tabelas diferentes. Um tem uma restrição de chave estrangeira, o outro uma chave primária. Portanto, ambas as linhas são retornadas.

Novamente, você pode usar o asterisco (* ) curinga para retornar todas as colunas.
SELECT *FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEWHERE TABLE_NAME ='Artistas';

Resultado (usando saída vertical):
TABLE_CATALOG | MúsicaTABLE_SCHEMA | dboTABLE_NAME | ArtistasCOLUMN_NAME | ArtistIdCONSTRAINT_CATALOG | MúsicaCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Artistas__25706B50FCD918B1

Neste exemplo, limitei a saída apenas a restrições em uma tabela específica.

Exemplo 4 – A visualização do sistema CONSTRAINT_TABLE_USAGE


O INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE a visualização do sistema retorna uma linha para cada tabela no banco de dados atual que possui uma restrição definida na tabela.
SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;

Resultado:
+--------------+------------------------------- +| TABLE_NAME | CONSTRAINT_NAME ||--------------+------------------------------------------| | Artistas | PK__Artistas__25706B50FCD918B1 || Gêneros | PK__Genres__0385057E88BB96F8 || Álbuns | PK__Albums__97B4BE379FC780BD || Álbuns | FK_Albums_Artists || Álbuns | FK_Albums_Genres |+--------------+------------------------------------------+ 

Essa exibição não retorna o(s) nome(s) da coluna em que as restrições são usadas, portanto, pode não ser tão útil para você, dependendo de seus requisitos.

Aqui está um exemplo que mostra todos os dados retornados por esta visualização para os Gêneros tabela:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGEWHERE TABLE_NAME ='Gêneros';

Resultado:
TABLE_CATALOG | MúsicaTABLE_SCHEMA | dboTABLE_NAME | GênerosCONSTRAINT_CATALOG | MúsicaCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Genres__0385057E88BB96F8

Exemplo 5 – A visualização do sistema TABLE_CONSTRAINTS


Os INFORMATION_SCHEMA.TABLE_CONSTRAINTS a visualização do sistema retorna uma linha para cada restrição de tabela no banco de dados atual.
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Resultado:
+--------------+------------------------------- +-------------------+| TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE ||--------------+------------------------------------------+ --------------------|| Artistas | PK__Artistas__25706B50FCD918B1 | CHAVE PRIMÁRIA || Gêneros | PK__Genres__0385057E88BB96F8 | CHAVE PRIMÁRIA || Álbuns | PK__Albums__97B4BE379FC780BD | CHAVE PRIMÁRIA || Álbuns | FK_Albums_Artists | CHAVE ESTRANGEIRA || Álbuns | FK_Albums_Genres | CHAVE ESTRANGEIRA |+--------------+------------------------------- +-------------------+

Essa exibição não fornece o nome da coluna, mas fornece o tipo de restrição. Portanto, você pode restringir os resultados a apenas chaves primárias:
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMARY KEY';

Resultado:
+--------------+------------------------------- +-------------------+| TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE ||--------------+------------------------------------------+ --------------------|| Artistas | PK__Artistas__25706B50FCD918B1 | CHAVE PRIMÁRIA || Gêneros | PK__Genres__0385057E88BB96F8 | CHAVE PRIMÁRIA || Álbuns | PK__Albums__97B4BE379FC780BD | CHAVE PRIMÁRIA |+--------------+------------------------------- +-------------------+

Aqui está um exemplo que usa um curinga (* ) para retornar todos os dados para restrições nos Artistas tabela:
SELECT *FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE TABLE_NAME ='Artistas';

Resultado:
CONSTRAINT_CATALOG | MúsicaCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Artists__25706B50FCD918B1TABLE_CATALOG | MúsicaTABLE_SCHEMA | dboTABLE_NAME | ArtistasCONSTRAINT_TYPE | PRIMARY KEYIS_DEFERRABLE | NOINITIALLY_DEFERRED | NÃO

Exemplo 6 – A visão do sistema key_constraints


As sys.key_constraints a visão do sistema contém uma linha para cada objeto que é uma chave primária ou restrição exclusiva. Portanto, poderíamos usar o seguinte código para retornar todas as restrições de chave primária no banco de dados, juntamente com a tabela relevante para cada chave primária:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', nameFROM sys.key_constraints WHERE type ='PK';

Resultado:
+---------+------------------------------------------+| Tabela | nome ||---------+------------------------------------------|| Artistas | PK__Artistas__25706B50FCD918B1 || Gêneros | PK__Genres__0385057E88BB96F8 || Álbuns | PK__Albums__97B4BE379FC780BD |+---------+-------------------------------+

Claro, você pode remover o WHERE cláusula para retornar as duas chaves primárias e chaves exclusivas.

O exemplo anterior usa o OBJECT_NAME() função para retornar o nome da tabela pai, em vez de seu object_id. Se eu não usei o OBJECT_NAME() função, o resultado ficaria assim:
SELECT parent_object_id, nameFROM sys.key_constraintsWHERE type ='PK';

Resultado:
+--------------------+------------------------- ------+| parent_object_id | nome ||--------------------+-------------------------- -----|| 885578193 | PK__Artistas__25706B50FCD918B1 || 917578307 | PK__Genres__0385057E88BB96F8 || 949578421 | PK__Albums__97B4BE379FC780BD |+--------------------+-------------------------- -----+

O parent_object_id é retornado em vez do nome do objeto pai. O OBJECT_NAME() A função torna muito mais fácil para nós entender a qual tabela cada chave é aplicada.

Aqui está um exemplo onde eu uso o curinga (* ) para retornar todas as colunas da chave primária nos Albums tabela:
SELECT *FROM sys.key_constraintsWHERE type ='PK'AND OBJECT_NAME(parent_object_id) ='Albums';

Resultado:
nome | PK__Albums__97B4BE379FC780BDobject_id | 965578478principal_id | NULLschema_id | 1parent_object_id | 949578421tipo | PKtype_desc | PRIMARY_KEY_CONSTRAINTcreate_date | 02-05-2019 12:56:06.377modificar_data | 2019-05-02 12:56:06.377is_ms_shipped | 0is_publicado | 0is_schema_publicado | 0unique_index_id | 1is_system_named | 1is_aplicado | 1

Exemplo 7 – A exibição do sistema sys.objects


Os sys.objects a visualização do sistema contém uma linha para cada objeto com escopo de esquema definido pelo usuário que é criado em um banco de dados. Portanto, contém nossas tabelas e chaves primárias.

Podemos pegar a consulta anterior e substituir key_constraints com objects e teremos o mesmo resultado:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', nameFROM sys.objects WHERE type ='PK';

Resultado:
+---------+------------------------------------------+| Tabela | nome ||---------+------------------------------------------|| Artistas | PK__Artistas__25706B50FCD918B1 || Gêneros | PK__Genres__0385057E88BB96F8 || Álbuns | PK__Albums__97B4BE379FC780BD |+---------+-------------------------------+

Aqui está um exemplo que retorna todos os dados para o PK__Genres__0385057E88BB96F8 chave primária:
SELECT *FROM sys.objectsWHERE name ='PK__Genres__0385057E88BB96F8';

Resultado (usando saída vertical):
nome | PK__Genres__0385057E88BB96F8object_id | 933578364principal_id | NULLschema_id | 1parent_object_id | 917578307tipo | PKtype_desc | PRIMARY_KEY_CONSTRAINTcreate_date | 02-05-2019 12:56:06.110modificar_data | 2019-05-02 12:56:06.110is_ms_shipped | 0is_publicado | 0is_schema_publicado | 0

Exemplo 8 – A visualização do sistema REFERENTIAL_CONSTRAINTS


Este é um pouco exagerado, mas pode ser útil dependendo da sua situação. E tecnicamente, ele retorna (algumas) chaves primárias.

Os INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS a visualização do sistema retorna uma linha para cada FOREIGN KEY restrição no banco de dados atual. Portanto, seu objetivo é, na verdade, retornar chaves estrangeiras – não chaves primárias. No entanto, essa visualização pode ser útil se você quiser apenas ver todas as chaves primárias que possuem uma chave estrangeira associada. Não é um método confiável para usar se você quiser ver todas as chaves primárias, independentemente de haver uma chave estrangeira associada.

Aqui está um exemplo:
SELECT CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;

Resultado:
+-------------------+-------------------------- -----+| CONSTRAINT_NAME | UNIQUE_CONSTRAINT_NAME ||-------------------+-------------------------------------- ----|| FK_Albums_Artists | PK__Artistas__25706B50FCD918B1 || FK_Albums_Genres | PK__Genres__0385057E88BB96F8 |+-------------------+--------------------------- ----+

Como você pode ver, isso retorna apenas as chaves primárias que possuem uma chave estrangeira associada. Para ser mais preciso, na verdade é o contrário - ele retorna todas as chaves estrangeiras, juntamente com seus UNIQUE associados limitação.

Portanto, se compararmos esses resultados com os resultados dos exemplos anteriores, podemos ver que apenas duas chaves primárias são retornadas (em comparação com três dos exemplos anteriores). Isso ocorre porque uma das chaves primárias neste banco de dados ( PK__Albums__97B4BE379FC780BD ) não tem uma chave estrangeira associada.

Aqui está um exemplo que retorna todos os dados de chaves estrangeiras das quais PK__Artists__25706B50FCD918B1 é o UNIQUE limitação:
SELECT *FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSWHERE UNIQUE_CONSTRAINT_NAME ='PK__Artists__25706B50FCD918B1';

Resultado:
CONSTRAINT_CATALOG | MúsicaCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | FK_Albums_ArtistsUNIQUE_CONSTRAINT_CATALOG | MúsicaUNIQUE_CONSTRAINT_SCHEMA | dboUNIQUE_CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1MATCH_OPTION | SIMPLEUPDATE_RULE | NO ACTIONDELETE_RULE | SEM AÇÃO

Nesse caso, apenas uma chave estrangeira é retornada.

Conforme mencionado, essa exibição é principalmente para retornar informações de chave estrangeira, portanto, use esse método apenas se desejar ver informações de chave estrangeira junto com a chave primária associada. Não use esse método se quiser ver todas as chaves primárias, independentemente de elas terem uma chave estrangeira associada.

Exemplo 9 – O procedimento armazenado do sistema sp_fkeys


Este método é semelhante ao método anterior, no sentido de que retorna informações de chave estrangeira. Ele também retorna a chave primária associada a cada chave estrangeira.

Exemplo:
Artistas EXEC sp_fkeys;

Resultado (usando saída vertical):
PKTABLE_QUALIFIER | MúsicaPKTABLE_OWNER | dboPKTABLE_NAME | ArtistasPKCOLUMN_NAME | ArtistIdFKTABLE_QUALIFIER | MúsicaFKTABLE_OWNER | dboFKTABLE_NAME | ÁlbunsFKCOLUMN_NAME | ArtistIdKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Albums_ArtistsPK_NAME | PK__Artists__25706B50FCD918B1DEFERRABILIDADE | 7

Eu poderia ter usado a seguinte sintaxe (ou uma combinação desses argumentos):
EXEC sp_fkeys @pktable_name =Artistas, @pktable_owner =dbo, @pktable_qualifier =Música, @fktable_name =Álbuns, @fktable_owner =dbo, @fktable_qualifier =Música;

Assim como no exemplo anterior, não se deve confiar neste método para retornar todas as chaves primárias. Se uma chave primária não tiver uma chave estrangeira associada, ela não será retornada.

Exemplo 10 – O procedimento armazenado do sistema sp_helpconstraint


A sp_helpconstraint O procedimento armazenado do sistema retorna uma lista de todos os tipos de restrição, seu nome definido pelo usuário ou fornecido pelo sistema, as colunas nas quais eles foram definidos e a expressão que define a restrição (para DEFAULT e CHECK apenas restrições).

Portanto, você pode usá-lo para retornar informações sobre chaves primárias em seu banco de dados.

Exemplo:
EXEC sp_helpconstraint Álbuns;

Resultado:
+---------------+| Nome do objeto ||---------------|| Álbuns |+---------------+ -[ RECORD 1 ]------------------------constraint_type | FOREIGN KEYconstraint_name | FK_Albums_Artistsdelete_action | Nenhuma açãoupdate_action | Não Actionstatus_enabled | Enabledstatus_for_replication | Is_For_Replicationconstraint_keys | ArtistId-[ RECORD 2 ]-----------------------------------constraint_type | nome_restrição | delete_action | atualização_ação | status_habilitado | status_for_replication | restrições_chaves | REFERÊNCIAS Music.dbo.Artists (ArtistId)-[ RECORD 3 ]------------------------constraint_type | FOREIGN KEYconstraint_name | FK_Albums_Genresdelete_action | Nenhuma açãoupdate_action | Não Actionstatus_enabled | Enabledstatus_for_replication | Is_For_Replicationconstraint_keys | GenreId-[ RECORD 4 ] -------------------------constraint_type | nome_restrição | delete_action | atualização_ação | status_habilitado | status_for_replication | restrições_chaves | REFERÊNCIAS Music.dbo.Genres (GenreId)-[ RECORD 5 ]------------------------constraint_type | PRIMARY KEY (clustered)constraint_name | PK__Albums__97B4BE379FC780BDdelete_action | (n/a)update_action | (n/a)status_enabled | (n/a)status_for_replication | (n/a)constraint_keys | ID do álbum

Exemplo 11 – O procedimento armazenado do sistema sp_help


O sp_help procedimento armazenado do sistema relata informações sobre um objeto de banco de dados (qualquer objeto listado em sys.sysobjects visualização de compatibilidade), um tipo de dados definido pelo usuário ou um tipo de dados. Isso inclui informações sobre chaves primárias.

Quando você executa isso sem nenhum argumento, ele fornece informações sobre informações resumidas de objetos de todos os tipos que existem no banco de dados atual (ou seja, um lot de informação).

No entanto, você pode fornecer o nome de uma tabela e ele retornará informações sobre essa tabela. Novamente, você receberá muitas informações retornadas, mas entre elas estarão as informações de chave primária.

Exemplo:
Artistas EXEC sp_help;

Resultado:
+---------+---------+------------+------------- ------------+| Nome | Proprietário | Tipo | Created_datetime ||---------+---------+------------+-------------- -----------|| Artistas | dbo | tabela de usuário | 2019-05-02 12:56:05.840 |+---------+---------+------------+----- --------------------+ -[ REGISTRO 1 ] ------------------------- -Column_name | ArtistIdType | intComputado | noLength | 4Prec | 10 Escala | 0 Anulável | noTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a)Agrupamento | NULL-[ RECORD 2 ]------------------------------------Column_name | ArtistNameType | nvarcharComputado | noLength | 510Prec | Escala | Anulável | noTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a)Agrupamento | SQL_Latin1_General_CP1_CI_AS-[ RECORD 3 ]----------------------------Column_name | ActiveFromType | dataComputado | noLength | 3Prec | 10 Escala | 0 Anulável | yesTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a)Agrupamento | NULL +------------+--------+-------------+------------ -----------+| Identidade | Semente | Incremento | Não para replicação ||------------+--------+-------------+--------- --------------|| ArtistId | 1 | 1 | 0 |+------------+--------+-------------+----------- ------------+ +-------------------------------+| RowGuidCol ||------------------------------------------|| Nenhuma coluna rowguidcol definida. |+-------------------------------+ +--------------- --------------+| Data_located_on_filegroup ||-----------------------------|| PRIMÁRIO |+-----------------------------+ +---------------- ---------------+---------------------------------- ---+--------------+| index_name | index_description | index_keys ||-------------------------------+--------------- ------------------------------------+------------- -|| PK__Artistas__25706B50FCD918B1 | chave primária em cluster, exclusiva, localizada em PRIMARY | ArtistId |+-------------------------------+--------------- ------------------------------------+------------- -+ -[ RECORD 1 ] -------------------------constraint_type | PRIMARY KEY (clustered)constraint_name | PK__Artists__25706B50FCD918B1delete_action | (n/a)update_action | (n/a)status_enabled | (n/a)status_for_replication | (n/a)constraint_keys | ArtistId +--------------------------------------+| A tabela é referenciada por chave estrangeira ||-------------------------------------------------|| Music.dbo.Albums:FK_Albums_Artists |+-------------------------------------------------+ 
Você também pode fornecer o nome de uma chave primária para obter algumas informações básicas sobre ela:
EXEC sp_help PK__Artists__25706B50FCD918B1;

Resultado:
+----------------------------+---------+---- -------------+-------------------------+| Nome | Proprietário | Tipo | Created_datetime ||-------------------------------+---------+----- ------------+-------------------------|| PK__Artistas__25706B50FCD918B1 | dbo | chave primária cns | 2019-05-02 12:56:05.853 |+------------------------------------------+------ ---+-----------------+-------------------------+