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

Restituisci informazioni sulla colonna da un server collegato in SQL Server (esempi T-SQL)

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).