I SQL Server kan du bruge sp_columns_ex
systemlagret procedure for at returnere kolonneinformation om kolonnerne fra en specificeret forbundet server.
Du kan angive en individuel kolonne, eller du kan angive alle kolonner fra en given database, tabel osv.
Syntaks
Syntaksen ser sådan ud:
sp_columns_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @column_name = ] 'column' ] [ , [ @ODBCVer = ] 'ODBCVer' ]
@table_server
argument er det eneste nødvendige argument. Dette er navnet på den sammenkædede server, som du vil have tabeloplysningerne fra.
De andre argumenter er valgfrie, og jeg dækker de fleste af dem i de følgende eksempler. For mere information om disse argumenter, se Microsoft-dokumentationen.
Eksempel 1 – Returner en specifik kolonne
Følgende eksempel returnerer oplysninger om en bestemt kolonne.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultat (ved hjælp af lodret output):
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
I dette tilfælde er servernavnet Homer
, databasenavnet er Music
, tabellens navn er Artists
, tabelskemaet er dbo
og kolonnenavnet er ArtistName
.
Dette kunne også gøres sådan her:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Eksempel 2 – Angiv kun en tabel
I dette eksempel angiver jeg kun tabelnavnet.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Dette returnerer oplysninger om alle kolonner i Kunstnere bord.
Eksempel 3 – Angiv database- og kolonnenavnet
I dette eksempel angiver jeg databasen og kolonnen, men ikke tabellen.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultater (ved hjælp af lodret output):
-[ 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
Dette gav tre kolonner mere. Disse kommer tilfældigvis fra tre forskellige visninger (databasen har tre visninger med et ArtistName
kolonne:BluesAlbums
, JazzAlbums
og RockAlbums
).
Eksempel 4 – Angiv kun en database
Her angiver jeg kun databasen:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Jeg vil ikke vise resultaterne her, fordi det returnerede næsten 6.000 rækker. De fleste af disse var fra sys
tabelskema.
Eksempel 5 – Angiv et tabelskema
Følgende eksempel indsnævrer resultaterne til et specifikt tabelskema (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Dette gav et meget mindre resultatsæt end det forrige eksempel. Den er stadig ret stor, så jeg viser den ikke her.
Eksempel 6 – Jokertegn
Du kan også bruge jokertegn. Her er et eksempel på brug af %
jokertegn:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Dette returnerer alle kolonner, der begynder med Ar
. I mit tilfælde returnerede det to
ArtistId
kolonner og fire
ArtistName
kolonner.
Jeg kunne indsnævre dette:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Dette returnerede kun ArtistName kolonner.
Men hvis jeg fjerner r
:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Jeg får nu fire ekstra kolonner kaldet AlbumName (samt ArtistName kolonner).