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