I SQL Server kan du använda sp_columns_ex
systemlagrad procedur för att returnera kolumninformation om kolumnerna från en specificerad länkad server.
Du kan ange en enskild kolumn, eller så kan du ange alla kolumner från en given databas, tabell, etc.
Syntax
Syntaxen ser ut så här:
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 är det enda nödvändiga argumentet. Detta är namnet på den länkade servern som du vill ha tabellinformationen från.
De andra argumenten är valfria och jag täcker de flesta av dem i följande exempel. Mer information om dessa argument finns i Microsofts dokumentation.
Exempel 1 – Returnera en specifik kolumn
Följande exempel returnerar information om en specifik kolumn.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultat (med vertikal utdata):
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 det här fallet är servernamnet Homer
, databasens namn är Music
, tabellnamnet är Artists
, tabellschemat är dbo
och kolumnnamnet är ArtistName
.
Detta kan också göras så här:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Exempel 2 – Ange endast en tabell
I det här exemplet anger jag bara tabellnamnet.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Detta returnerar information om alla kolumner i Artister tabell.
Exempel 3 – Ange databas- och kolumnnamn
I det här exemplet anger jag databasen och kolumnen, men inte tabellen.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Resultat (med vertikal utdata):
-[ 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
Detta gav ytterligare tre kolumner. Dessa råkar vara från tre olika vyer (databasen har tre vyer med ett ArtistName
). kolumn:BluesAlbums
, JazzAlbums
, och RockAlbums
).
Exempel 4 – Ange endast en databas
Här anger jag bara databasen:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Jag kommer inte att visa resultaten här eftersom det gav nästan 6 000 rader. De flesta av dessa var från sys
tabellschema.
Exempel 5 – Ange ett tabellschema
Följande exempel begränsar resultaten till ett specifikt tabellschema (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Detta gav en mycket mindre resultatuppsättning än föregående exempel. Den är fortfarande ganska stor, så jag kommer inte visa den här.
Exempel 6 – Jokertecken
Du kan också använda jokertecken. Här är ett exempel på hur du använder %
jokertecken:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Detta returnerar alla kolumner som börjar med Ar
. I mitt fall returnerade den två
ArtistId
kolumner och fyra
Artistnamn
kolumner.
Jag skulle kunna begränsa detta:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Detta returnerade bara Artistnamn kolumner.
Men om jag tar bort r
:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Jag får nu fyra extra kolumner som heter AlbumName (liksom Artistnamn kolumner).