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 | +----------------------+-----------------------+------------+