In SQL Server kunt u de sp_columns_ex
. gebruiken systeem opgeslagen procedure om kolominformatie over de kolommen van een opgegeven gekoppelde server te retourneren.
U kunt een individuele kolom specificeren, of u kunt alle kolommen van een bepaalde database, tabel, enz. specificeren.
Syntaxis
De syntaxis gaat als volgt:
sp_columns_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @column_name = ] 'column' ] [ , [ @ODBCVer = ] 'ODBCVer' ]
De @table_server
argument is het enige vereiste argument. Dit is de naam van de gekoppelde server waarvan u de tabelinformatie wilt hebben.
De andere argumenten zijn optioneel en ik behandel de meeste ervan in de volgende voorbeelden. Zie de Microsoft-documentatie voor meer informatie over deze argumenten.
Voorbeeld 1 – Geef een specifieke kolom terug
Het volgende voorbeeld retourneert informatie over een specifieke kolom.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultaat (met verticale uitvoer):
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 dit geval is de servernaam Homer
, de databasenaam is Music
, de tabelnaam is Artists
, het tabelschema is dbo
en de kolomnaam is ArtistName
.
Dit kan ook als volgt worden gedaan:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Voorbeeld 2 – Specificeer alleen een tabel
In dit voorbeeld geef ik alleen de tabelnaam op.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Dit retourneert informatie over alle kolommen in de Artiesten tafel.
Voorbeeld 3 – Specificeer de Database &Kolomnaam
In dit voorbeeld specificeer ik de database en kolom, maar niet de tabel.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultaten (met verticale uitvoer):
-[ 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
Dit leverde nog drie kolommen op. Deze komen toevallig uit drie verschillende weergaven (de database heeft drie weergaven met een ArtistName
kolom:BluesAlbums
, JazzAlbums
, en RockAlbums
).
Voorbeeld 4 – Specificeer alleen een database
Hier specificeer ik alleen de database:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Ik zal de resultaten hier niet weergeven omdat het bijna 6.000 rijen heeft opgeleverd. De meeste hiervan waren afkomstig uit de sys
tabelschema.
Voorbeeld 5 – Specificeer een tabelschema
In het volgende voorbeeld worden de resultaten beperkt tot een specifiek tabelschema (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Dit leverde een veel kleinere resultatenset op dan het vorige voorbeeld. Het is nog steeds vrij groot, dus ik zal het hier niet weergeven.
Voorbeeld 6 – Jokertekens
U kunt ook jokertekens gebruiken. Hier is een voorbeeld van het gebruik van de %
jokerteken:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Hiermee worden alle kolommen geretourneerd die beginnen met Ar
. In mijn geval retourneerde het twee
ArtistId
kolommen en vier
ArtistName
kolommen.
Ik zou dit kunnen verfijnen:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Dit leverde alleen de ArtiestNaam . op kolommen.
Als ik echter de r
. verwijder :
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Ik krijg nu vier extra kolommen genaamd AlbumName (evenals de ArtiestNaam kolommen).