Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Elenca tutte le colonne di identità in un database di SQL Server:sys.identity_columns

È possibile utilizzare T-SQL per restituire un elenco di colonne di identità in un database in SQL Server.

Puoi farlo usando sys.identity_columns vista catalogo di sistema.

Esempio 1 – Utilizzo di base

Ecco un esempio da dimostrare.

USE Test;
SELECT 
  OBJECT_NAME(object_id) AS [object],
  name,
  seed_value,
  increment_value,
  last_value,
  is_not_for_replication
FROM sys.identity_columns;

Risultato:

+---------------------------+------------------+--------------+-------------------+--------------+--------------------------+
| object                    | name             | seed_value   | increment_value   | last_value   | is_not_for_replication   |
|---------------------------+------------------+--------------+-------------------+--------------+--------------------------|
| ConstraintTest            | ConstraintTestId | 1            | 1                 | 17           | 0                        |
| sqlagent_job_history      | instance_id      | 1            | 1                 | NULL         | 0                        |
| sqlagent_jobsteps_logs    | log_id           | 1            | 1                 | NULL         | 0                        |
| Cats                      | id               | 1            | 1                 | 2            | 0                        |
| Dogs                      | id               | 1            | 1                 | 1            | 0                        |
| t1                        | id               | 1            | 1                 | 2            | 0                        |
| t2                        | id               | 150          | 10                | 160          | 0                        |
| scope_identity_test       | id               | 1            | 1                 | 3            | 0                        |
| Event                     | EventId          | 1            | 1                 | NULL         | 0                        |
| Scoreboard                | ScoreId          | 1            | 1                 | 8            | 0                        |
| Pets                      | PetId            | 1            | 1                 | 5            | 0                        |
| BestFriends               | pet_id           | 101          | 10                | 121          | 0                        |
| Cities                    | CityId           | 150          | 10                | 180          | 0                        |
| Colors                    | ColorId          | 1            | 1                 | 6            | 0                        |
| queue_messages_1977058079 | queuing_order    | 0            | 1                 | NULL         | 0                        |
| t6                        | id               | 1            | 1                 | 1            | 0                        |
| t7                        | id               | 100          | 1                 | 100          | 0                        |
| queue_messages_2009058193 | queuing_order    | 0            | 1                 | NULL         | 0                        |
| queue_messages_2041058307 | queuing_order    | 0            | 1                 | NULL         | 0                        |
+---------------------------+------------------+--------------+-------------------+--------------+--------------------------+

Ho usato il mio Test database per questo esempio. Ho scelto questo perché in precedenza ho creato colonne di identità con vari valori di incremento del seme.

In questo esempio ho usato OBJECT_NAME() funzione per ottenere il nome dell'oggetto da object_id colonna. In questo caso è il nome della tabella. Quindi, in altre parole, la prima colonna elenca il nome della tabella e la seconda colonna elenca la colonna Identity.

Esempio 2 – Elenca tutte le colonne

Nell'esempio precedente ho restituito solo una manciata di colonne. Questo perché sys.identity_columns restituisce molte colonne.

In questo esempio restituisco solo una colonna di identità (cioè una riga), ma restituisco tutte le colonne per quella riga. Uso l'output verticale quando visualizzo i risultati in modo da non essere costretto a scorrere lateralmente.

SELECT *
FROM sys.identity_columns
WHERE OBJECT_NAME(object_id) = 'Cities';

Risultato (usando l'output verticale):

object_id                           | 1970106059
name                                | CityId
column_id                           | 1
system_type_id                      | 56
user_type_id                        | 56
max_length                          | 4
precision                           | 10
scale                               | 0
collation_name                      | NULL
is_nullable                         | 0
is_ansi_padded                      | 0
is_rowguidcol                       | 0
is_identity                         | 1
is_filestream                       | 0
is_replicated                       | 0
is_non_sql_subscribed               | 0
is_merge_published                  | 0
is_dts_replicated                   | 0
is_xml_document                     | 0
xml_collection_id                   | 0
default_object_id                   | 0
rule_object_id                      | 0
seed_value                          | 150
increment_value                     | 10
last_value                          | 180
is_not_for_replication              | 0
is_computed                         | 0
is_sparse                           | 0
is_column_set                       | 0
generated_always_type               | 0
generated_always_type_desc          | NOT_APPLICABLE
encryption_type                     | NULL
encryption_type_desc                | NULL
encryption_algorithm_name           | NULL
column_encryption_key_id            | NULL
column_encryption_key_database_name | NULL
is_hidden                           | 0
is_masked                           | 0
graph_type                          | NULL
graph_type_desc                     | NULL

La maggior parte di queste colonne viene ereditata da sys.columns , ma alcuni sono univoci per le sys.identity columns . Per una descrizione dettagliata di queste colonne, consulta la documentazione Microsoft per sys.columns e sys.identity columns .

Compresi tabelle e schemi

Potresti aver notato che questi esempi non includono lo schema nel set di risultati. Vedere Inclusione di tabelle e schemi nell'elenco delle colonne identità se è necessario restituire lo schema. Tale articolo include anche un esempio di rimozione delle tabelle interne dai risultati.