Trong SQL Server, bạn có thể sử dụng sp_columns_ex
hệ thống lưu trữ thủ tục để trả về thông tin cột về các cột từ một máy chủ được liên kết cụ thể.
Bạn có thể chỉ định một cột riêng lẻ hoặc bạn có thể chỉ định tất cả các cột từ một cơ sở dữ liệu, bảng nhất định, v.v.
Cú pháp
Cú pháp như sau:
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
đối số là đối số bắt buộc duy nhất. Đây là tên của máy chủ được liên kết mà bạn muốn có thông tin bảng.
Các đối số khác là tùy chọn và tôi đề cập hầu hết chúng trong các ví dụ sau. Để biết thêm thông tin về các đối số này, hãy xem tài liệu của Microsoft.
Ví dụ 1 - Trả về một cột cụ thể
Ví dụ sau trả về thông tin về một cột cụ thể.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'ArtistName';
Kết quả (sử dụng đầu ra dọc):
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
Trong trường hợp này, tên máy chủ là Homer
, tên cơ sở dữ liệu là Music
, tên bảng là Artists
, lược đồ bảng là dbo
và tên cột là ArtistName
.
Điều này cũng có thể được thực hiện như thế này:
EXEC sp_columns_ex 'Homer', 'Artists', 'dbo', 'Music', 'ArtistName';
Ví dụ 2 - Chỉ Chỉ định Bảng
Trong ví dụ này, tôi chỉ xác định tên bảng.
EXEC sp_columns_ex @table_server = 'Homer', @table_name = 'Artists';
Điều này trả về thông tin về tất cả các cột trong Nghệ sĩ bàn.
Ví dụ 3 - Chỉ định Cơ sở dữ liệu &Tên Cột
Trong ví dụ này, tôi chỉ định cơ sở dữ liệu và cột, nhưng không chỉ định bảng.
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music', @column_name = 'ArtistName';
Kết quả (sử dụng đầu ra dọc):
-[ 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
Điều này trả lại ba cột nữa. Chúng xảy ra từ ba chế độ xem khác nhau (cơ sở dữ liệu có ba chế độ xem với một ArtistName
cột:BluesAlbums
, JazzAlbums
và RockAlbums
).
Ví dụ 4 - Chỉ Chỉ định Cơ sở dữ liệu
Ở đây tôi chỉ xác định cơ sở dữ liệu:
EXEC sp_columns_ex @table_server = 'Homer', @table_catalog = 'Music';
Tôi sẽ không hiển thị kết quả ở đây vì nó trả về gần 6.000 hàng. Hầu hết trong số này là từ sys
lược đồ bảng.
Ví dụ 5 - Chỉ định một lược đồ bảng
Ví dụ sau đây thu hẹp kết quả vào một lược đồ bảng cụ thể (dbo
).
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo';
Điều này trả về một tập hợp kết quả nhỏ hơn nhiều so với ví dụ trước. Nó vẫn còn khá lớn, vì vậy tôi sẽ không hiển thị nó ở đây.
Ví dụ 6 - Các ký tự đại diện
Bạn cũng có thể sử dụng các ký tự đại diện. Dưới đây là một ví dụ về việc sử dụng %
ký tự đại diện:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Điều này trả về tất cả các cột bắt đầu bằng Ar
. Trong trường hợp của tôi, nó trả về hai
ArtistId
cột và bốn
ArtistName
cột.
Tôi có thể thu hẹp điều này lại:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%Name';
Điều này chỉ trả về ArtistName cột.
Tuy nhiên, nếu tôi xóa r
:
EXEC sp_columns_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'A%Name';
Bây giờ tôi nhận được bốn cột bổ sung có tên là AlbumName (cũng như ArtistName cột).