В SQL Server можете да използвате sp_columns_ex
системна съхранена процедура за връщане на информация за колоните за колоните от определен свързан сървър.
Можете да посочите отделна колона или да посочите всички колони от дадена база данни, таблица и т.н.
Синтаксис
Синтаксисът е така:
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
аргументът е единственият задължителен аргумент. Това е името на свързания сървър, от който искате информацията за таблицата.
Другите аргументи са незадължителни и аз обхващам повечето от тях в следващите примери. За повече информация относно тези аргументи вижте документацията на Microsoft.
Пример 1 – Връщане на конкретна колона
Следният пример връща информация за конкретна колона.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Резултат (с помощта на вертикален изход):
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
В този случай името на сървъра е Homer
, името на базата данни е Music
, името на таблицата е Artists
, схемата на таблицата е dbo
и името на колоната е ArtistName
.
Това може да се направи и по следния начин:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Пример 2 – Посочете само таблица
В този пример указвам само името на таблицата.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Това връща информация за всички колони в Изпълнители маса.
Пример 3 – Посочете името на базата данни и колоната
В този пример посочвам базата данни и колоната, но не и таблицата.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Резултати (с помощта на вертикален изход):
-[ 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
Това върна още три колони. Те са от три различни изгледа (базата данни има три изгледа с ArtistName
колона:BluesAlbums
, JazzAlbums
и RockAlbums
).
Пример 4 – Посочете само база данни
Тук посочвам само базата данни:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Няма да показвам резултатите тук, защото върна почти 6000 реда. Повечето от тях бяха от sys
схема на таблицата.
Пример 5 – Посочете схема на таблица
Следният пример стеснява резултатите до конкретна схема на таблица (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Това върна много по-малък набор от резултати от предишния пример. Все още е доста голям, така че няма да го показвам тук.
Пример 6 – заместващи знаци
Можете също да използвате заместващи знаци. Ето пример за използване на %
заместващ знак:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Това връща всички колони, които започват с Ar
. В моя случай той върна два
ArtistId
колони и четири
Име на изпълнител
колони.
Мога да стесня това:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Това върна само Име на изпълнител колони.
Въпреки това, ако премахна r
:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Сега получавам четири допълнителни колони, наречени AlbumName (както и Име на изпълнител колони).