Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer les informations de colonne d'un serveur lié dans SQL Server (exemples T-SQL)

Dans SQL Server, vous pouvez utiliser le sp_columns_ex procédure stockée système pour renvoyer des informations de colonne sur les colonnes à partir d'un serveur lié spécifié.

Vous pouvez spécifier une colonne individuelle ou vous pouvez spécifier toutes les colonnes d'une base de données, d'une table, etc.

Syntaxe

La syntaxe ressemble à ceci :

sp_columns_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column' ]   
     [ , [ @ODBCVer = ] 'ODBCVer' ]

Le @table_server argument est le seul argument requis. Il s'agit du nom du serveur lié à partir duquel vous souhaitez obtenir les informations de la table.

Les autres arguments sont facultatifs et je couvre la plupart d'entre eux dans les exemples suivants. Pour plus d'informations sur ces arguments, consultez la documentation de Microsoft.

Exemple 1 - Renvoyer une colonne spécifique

L'exemple suivant renvoie des informations sur une colonne spécifique.

EXEC sp_columns_ex 
  @table_server = 'Homer',   
  @table_name = 'Artists',   
  @table_schema = 'dbo',   
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Résultat (en utilisant la sortie 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

Dans ce cas, le nom du serveur est Homer , le nom de la base de données est Music , le nom de la table est Artists , le schéma de la table est dbo et le nom de la colonne est ArtistName .

Cela pourrait aussi être fait comme ceci :

EXEC sp_columns_ex 
  'Homer',   
  'Artists',   
   'dbo',   
  'Music',   
  'ArtistName';

Exemple 2 - Spécifiez une table uniquement

Dans cet exemple, je spécifie uniquement le nom de la table.

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_name = 'Artists';

Cela renvoie des informations sur toutes les colonnes dans les Artistes table.

Exemple 3 - Spécifiez le nom de la base de données et de la colonne

Dans cet exemple, je spécifie la base de données et la colonne, mais pas la table.

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Résultats (en utilisant la sortie 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

Cela a renvoyé trois colonnes supplémentaires. Celles-ci proviennent de trois vues différentes (la base de données a trois vues avec un ArtistName colonne :BluesAlbums , JazzAlbums , et RockAlbums ).

Exemple 4 - Spécifier une base de données uniquement

Ici, je précise uniquement la base de données :

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music';

Je n'afficherai pas les résultats ici car il a renvoyé près de 6 000 lignes. La plupart d'entre eux provenaient du sys schéma de table.

Exemple 5 - Spécifier un schéma de table

L'exemple suivant restreint les résultats à un schéma de table spécifique (dbo ).

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Cela a renvoyé un ensemble de résultats beaucoup plus petit que l'exemple précédent. Il est encore assez grand, donc je ne l'afficherai pas ici.

Exemple 6 – Caractères génériques

Vous pouvez également utiliser des caractères génériques. Voici un exemple d'utilisation du % caractère générique :

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Cela renvoie toutes les colonnes qui commencent par Ar . Dans mon cas, il a renvoyé deux ArtistId colonnes et quatre ArtistName colonnes.

Je pourrais réduire cela :

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%Name';

Cela n'a renvoyé que le ArtistName colonnes.

Cependant, si je supprime le r :

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'A%Name';

J'obtiens maintenant quatre colonnes supplémentaires appelées AlbumName (ainsi que le ArtistName colonnes).