In SQL Server puoi usare sp_columns_ex
stored procedure di sistema per restituire le informazioni sulle colonne da un server collegato specificato.
Puoi specificare una singola colonna oppure puoi specificare tutte le colonne di un determinato database, tabella, ecc.
Sintassi
La sintassi è questa:
sp_columns_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @column_name = ] 'column' ] [ , [ @ODBCVer = ] 'ODBCVer' ]
Il @table_server
argomento è l'unico argomento richiesto. Questo è il nome del server collegato da cui vuoi le informazioni sulla tabella.
Gli altri argomenti sono facoltativi e ne tratterò la maggior parte nei seguenti esempi. Per ulteriori informazioni su questi argomenti, vedere la documentazione Microsoft.
Esempio 1:restituisce una colonna specifica
L'esempio seguente restituisce informazioni su una colonna specifica.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Risultato (usando l'output verticale):
TABLE_CAT | Music TABLE_SCHEM | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar COLUMN_SIZE | 255 BUFFER_LENGTH | 510 DECIMAL_DIGITS | NULL NUM_PREC_RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39
In questo caso, il nome del server è Homer
, il nome del database è Music
, il nome della tabella è Artists
, lo schema della tabella è dbo
e il nome della colonna è ArtistName
.
Questo potrebbe anche essere fatto in questo modo:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Esempio 2:specifica solo una tabella
In questo esempio specifico solo il nome della tabella.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Questo restituisce informazioni su tutte le colonne in Artisti tavolo.
Esempio 3:specificare il database e il nome della colonna
In questo esempio specifico il database e la colonna, ma non la tabella.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Risultati (usando l'output verticale):
-[ RECORD 1 ]------------------------- TABLE_CAT | Music TABLE_SCHEM | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar COLUMN_SIZE | 255 BUFFER_LENGTH | 510 DECIMAL_DIGITS | NULL NUM_PREC_RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39 -[ RECORD 2 ]------------------------- TABLE_CAT | Music TABLE_SCHEM | dbo TABLE_NAME | BluesAlbums COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar COLUMN_SIZE | 255 BUFFER_LENGTH | 510 DECIMAL_DIGITS | NULL NUM_PREC_RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39 -[ RECORD 3 ]------------------------- TABLE_CAT | Music TABLE_SCHEM | dbo TABLE_NAME | JazzAlbums COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar COLUMN_SIZE | 255 BUFFER_LENGTH | 510 DECIMAL_DIGITS | NULL NUM_PREC_RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39 -[ RECORD 4 ]------------------------- TABLE_CAT | Music TABLE_SCHEM | dbo TABLE_NAME | RockAlbums COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar COLUMN_SIZE | 255 BUFFER_LENGTH | 510 DECIMAL_DIGITS | NULL NUM_PREC_RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39
Ciò ha restituito altre tre colonne. Questi provengono da tre viste diverse (il database ha tre viste con un ArtistName
colonna:BluesAlbums
, JazzAlbums
e RockAlbums
).
Esempio 4:specificare un solo database
Qui specifico solo il database:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Non visualizzerò i risultati qui perché ha restituito quasi 6.000 righe. La maggior parte di questi proveniva da sys
schema della tabella.
Esempio 5:specificare uno schema di tabella
L'esempio seguente restringe i risultati a uno schema di tabella specifico (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Ciò ha restituito un set di risultati molto più piccolo rispetto all'esempio precedente. È ancora abbastanza grande, quindi non lo visualizzerò qui.
Esempio 6 – Caratteri jolly
Puoi anche usare caratteri jolly. Ecco un esempio di utilizzo del %
carattere jolly:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Questo restituisce tutte le colonne che iniziano con Ar
. Nel mio caso, ha restituito due
ArtistId
colonne e quattro
ArtistName
colonne.
Potrei restringere il campo:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Questo ha restituito solo il ArtistName colonne.
Tuttavia, se rimuovo il r
:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Ora ottengo quattro colonne extra chiamate AlbumName (oltre a ArtistName colonne).