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

Ottieni il nome di una colonna dal suo ID in SQL Server:COL_NAME()

In SQL Server puoi utilizzare COL_NAME() funzione per restituire il nome di una colonna, in base al suo ID e al suo ID tabella padre.

Questo può essere utile quando si esegue una query su una tabella che memorizza solo l'ID colonna e l'ID della tabella padre.

Il COL_NAME() La funzione richiede due argomenti:l'ID tabella e l'ID colonna.

Sintassi

La sintassi è questa:

COL_NAME ( table_id , column_id )

Esempio 1 – Utilizzo di base

Ecco un esempio di base per dimostrare come funziona.

SELECT COL_NAME(885578193, 1) AS Result;

Risultato:

+----------+
| Result   |
|----------|
| ArtistId |
+----------+

In questo caso, ho restituito il nome della colonna 1 dalla tabella con ID 885578193.

Esempio 2:ottieni l'ID tabella

Se conosci solo il nome della tabella, puoi utilizzare OBJECT_ID() per restituire il suo ID in base al nome della tabella.

Mi capita di conoscere il nome della tabella sopra, quindi potrei cambiare l'esempio precedente in questo:

SELECT COL_NAME(OBJECT_ID('dbo.Artists'), 1) AS Result;

Risultato:

+----------+
| Result   |
|----------|
| ArtistId |
+----------+

Eccolo di nuovo, ma con l'ID tabella incluso:

SELECT 
  OBJECT_ID('dbo.Artists') AS [Table ID],
  COL_NAME(OBJECT_ID('dbo.Artists'), 1) AS [Column Name];

Risultato:

+------------+---------------+
| Table ID   | Column Name   |
|------------+---------------|
| 885578193  | ArtistId      |
+------------+---------------+

Esempio 3:più colonne

Qui, aggiungo alcune altre colonne all'output.

SELECT 
  COL_NAME(OBJECT_ID('dbo.Artists'), 1) AS [Column 1],
  COL_NAME(OBJECT_ID('dbo.Artists'), 2) AS [Column 2],
  COL_NAME(OBJECT_ID('dbo.Artists'), 3) AS [Column 3],
  COL_NAME(OBJECT_ID('dbo.Artists'), 4) AS [Column 4];

Risultato:

+------------+------------+------------+------------+
| Column 1   | Column 2   | Column 3   | Column 4   |
|------------+------------+------------+------------|
| ArtistId   | ArtistName | ActiveFrom | CountryId  |
+------------+------------+------------+------------+

Esempio 4 – Verifica delle dipendenze

Ecco un esempio in cui utilizzo COL_NAME() in una query che controlla sys.sql_expression_dependencies vista di sistema per informazioni sulle dipendenze. Questa vista restituisce gli ID delle colonne anziché i loro nomi, quindi utilizzo COL_NAME() per ottenere i loro nomi.

SELECT
    OBJECT_NAME(referencing_id) AS [Referencing Entity],
    referenced_minor_id,
    COL_NAME(referenced_id, referenced_minor_id) AS [Column]
FROM sys.sql_expression_dependencies;

Risultato:

+----------------------+-----------------------+------------+
| Referencing Entity   | referenced_minor_id   | Column     |
|----------------------+-----------------------+------------|
| uspGetClient         | 0                     | NULL       |
| uspGetClient         | 0                     | NULL       |
| uspGetOrdersByClient | 0                     | NULL       |
| uspGetOrdersByClient | 0                     | NULL       |
| uspGetOrdersByClient | 0                     | NULL       |
| uspGetAlbumsByArtist | 0                     | NULL       |
| chkClientCode        | 1                     | ClientCode |
+----------------------+-----------------------+------------+

Esempio 5 – In una clausola WHERE

Qui uso il COL_NAME() funzione in un WHERE clausola in modo che righe con un referenced_minor_id di NULL non vengono restituiti.

SELECT
    OBJECT_NAME(referencing_id) AS [Referencing Entity],
    referenced_minor_id,
    COL_NAME(referenced_id, referenced_minor_id) AS [Column]
FROM sys.sql_expression_dependencies
WHERE COL_NAME(referenced_id, referenced_minor_id) IS NOT NULL;

Risultato:

+----------------------+-----------------------+------------+
| Referencing Entity   | referenced_minor_id   | Column     |
|----------------------+-----------------------+------------|
| chkClientCode        | 1                     | ClientCode |
+----------------------+-----------------------+------------+