Bài viết này trình bày mười một cách tiếp cận khác nhau để truy xuất thông tin khóa ngoại trong SQL Server. Một số trong số này sẽ hữu ích hơn những cái khác, tùy thuộc vào tình huống.
Một số phương pháp này có thể được sửa đổi để trả lại thông tin khác. Ví dụ:bạn có thể thực hiện các phép nối trên các chế độ xem hệ thống khác nhau để trả về nhiều dữ liệu hơn.
Ví dụ 1 - Thủ tục lưu trữ hệ thống sp_fkeys
sp_fkeys
hệ thống lưu trữ thủ tục trả về thông tin khóa ngoại hợp lý cho môi trường hiện tại. Nó hiển thị các mối quan hệ khóa ngoài bao gồm các khóa ngoại bị vô hiệu hóa.
Thủ tục được lưu trữ này lý tưởng khi bạn cần thông tin khóa ngoại cho một bảng cụ thể. Bạn chỉ cần chuyển tên bảng khóa chính hoặc khóa ngoại vào quy trình và nó sẽ trả về thông tin liên quan.
Ví dụ:
EXEC sp_fkeys @fktable_name = Albums;
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Artists PKCOLUMN_NAME | ArtistId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | ArtistId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Artists PK_NAME | PK__Artists__25706B50FCD918B1 DEFERRABILITY | 7 -[ RECORD 2 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Genres PKCOLUMN_NAME | GenreId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | GenreId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Genres PK_NAME | PK__Genres__0385057E88BB96F8 DEFERRABILITY | 7
Một cách khác để sử dụng chế độ xem này là cung cấp tên bảng khóa chính:
EXEC sp_fkeys @pktable_name = Artists;
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Artists PKCOLUMN_NAME | ArtistId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | ArtistId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Artists PK_NAME | PK__Artists__25706B50FCD918B1 DEFERRABILITY | 7
Bạn cũng có thể sử dụng các đối số khác, chẳng hạn như chủ sở hữu bảng và bộ định tính bảng:
EXEC sp_fkeys @pktable_name = Artists, @pktable_owner = dbo, @pktable_qualifier = Music, @fktable_name = Albums, @fktable_owner = dbo, @fktable_qualifier = Music;
Ví dụ 2 - Chế độ xem Hệ thống REFERENTIAL_CONSTRAINTS
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
chế độ xem hệ thống trả về một hàng cho mỗi FOREIGN KEY
ràng buộc trong cơ sở dữ liệu hiện tại.
Điều này lý tưởng để nhanh chóng trả về danh sách các khóa ngoại trong cơ sở dữ liệu cùng với ràng buộc duy nhất liên quan của chúng. Bạn không bị giới hạn chỉ trong một bảng như ví dụ trước.
Đây là một ví dụ:
SELECT CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
Kết quả:
+-------------------+-------------------------------+ | CONSTRAINT_NAME | UNIQUE_CONSTRAINT_NAME | |-------------------+-------------------------------| | FK_Albums_Artists | PK__Artists__25706B50FCD918B1 | | FK_Albums_Genres | PK__Genres__0385057E88BB96F8 | +-------------------+-------------------------------+
Vì vậy, trong trường hợp này, chúng ta có thể thấy từng khóa ngoại trong cơ sở dữ liệu hiện tại, cùng với khóa chính liên quan của nó.
Hóa ra, cơ sở dữ liệu này chỉ có hai khóa ngoại và chúng giống như những khóa mà chúng ta đã thấy trong ví dụ trước.
Đây là một ví dụ trả về tất cả dữ liệu cho FK_Albums_Artists khóa ngoại:
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_Albums_Artists';
Kết quả:
CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists UNIQUE_CONSTRAINT_CATALOG | Music UNIQUE_CONSTRAINT_SCHEMA | dbo UNIQUE_CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1 MATCH_OPTION | SIMPLE UPDATE_RULE | NO ACTION DELETE_RULE | NO ACTION
Bạn sẽ nhận thấy rằng phương pháp này không cung cấp chi tiết bảng khóa chính và khóa ngoại mà bạn nhận được với phương pháp trước đó, vì vậy bạn cần thực hiện một số phép nối với các dạng xem khác nếu bạn cần thông tin đó (hoặc sử dụng một trong các phương pháp dưới đây).
Ví dụ 3 - Chế độ xem Hệ thống KEY_COLUMN_USAGE
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
chế độ xem hệ thống trả về một hàng cho mỗi cột được giới hạn như một khóa trong cơ sở dữ liệu hiện tại.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
Kết quả:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Chúng ta có thể thấy rằng điều này trả về tất cả các ràng buộc, bao gồm cả khóa chính.
Chúng tôi cũng có thể thêm WHERE
để thu hẹp kết quả vào một bảng cụ thể.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Kết quả:
+--------------+---------------+------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | +--------------+---------------+------------------------------+
Trong những ví dụ này, tôi đã thu hẹp kết quả chỉ thành những cột của chế độ xem mà tôi quan tâm, nhưng bạn cũng có thể sử dụng dấu hoa thị (*
) ký tự đại diện để trả về tất cả các cột.
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | ArtistId ORDINAL_POSITION | 1 -[ RECORD 2 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | GenreId ORDINAL_POSITION | 1 -[ RECORD 3 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | AlbumId ORDINAL_POSITION | 1
Ví dụ 4 - Chế độ xem Hệ thống CONSTRAINT_COLUMN_USAGE
Điều này tương tự với ví dụ trước. INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
chế độ xem hệ thống trả về một hàng cho mỗi cột trong cơ sở dữ liệu hiện tại có một ràng buộc được xác định trên cột.
Như với INFORMATION_SCHEMA.KEY_COLUMN_USAGE
bạn cũng sẽ nhận được các khóa chính được trả lại với chế độ xem này. Tuy nhiên, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
không chỉ giới hạn ở các ràng buộc chính.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;
Kết quả:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Bạn có thể sử dụng WHERE
mệnh đề chỉ trả về một bảng hoặc cột cụ thể:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE COLUMN_NAME = 'ArtistId';
Kết quả:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | +--------------+---------------+-------------------------------+
Trong trường hợp này, tôi đã chỉ định một tên cột, vì vậy nó trả về tất cả các ràng buộc trên các cột có tên đó. Hóa ra, cơ sở dữ liệu sử dụng cùng một tên cột trong hai bảng khác nhau. Một có ràng buộc khóa ngoại, khóa còn lại là khóa chính. Do đó, cả hai hàng đều được trả về.
Một lần nữa, bạn có thể sử dụng dấu hoa thị (*
) ký tự đại diện để trả về tất cả các cột.
Dưới đây là một ví dụ mà tôi trả lại tất cả dữ liệu cho một bảng cụ thể:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | ArtistId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists -[ RECORD 2 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | GenreId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres -[ RECORD 3 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | AlbumId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD
Ví dụ 5 - Chế độ xem Hệ thống CONSTRAINT_TABLE_USAGE
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
chế độ xem hệ thống trả về một hàng cho mỗi bảng trong cơ sở dữ liệu hiện tại có một ràng buộc được xác định trên bảng.
SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;
Kết quả:
+--------------+-------------------------------+ | TABLE_NAME | CONSTRAINT_NAME | |--------------+-------------------------------| | Artists | PK__Artists__25706B50FCD918B1 | | Genres | PK__Genres__0385057E88BB96F8 | | Albums | PK__Albums__97B4BE379FC780BD | | Albums | FK_Albums_Artists | | Albums | FK_Albums_Genres | +--------------+-------------------------------+
Chế độ xem này không trả về / các tên cột mà các ràng buộc được sử dụng, vì vậy, nó có thể không hữu ích cho bạn, tùy thuộc vào yêu cầu của bạn.
Dưới đây là một ví dụ hiển thị tất cả dữ liệu do chế độ xem này trả về cho Album bảng:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_NAME = 'Albums';
Kết quả:
-[ RECORD 1 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD -[ RECORD 2 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists -[ RECORD 3 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres
Ví dụ 6 - Chế độ xem Hệ thống TABLE_CONSTRAINTS
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
chế độ xem hệ thống trả về một hàng cho mỗi ràng buộc bảng trong cơ sở dữ liệu hiện tại.
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Kết quả:
+--------------+-------------------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------------------+-------------------| | Artists | PK__Artists__25706B50FCD918B1 | PRIMARY KEY | | Genres | PK__Genres__0385057E88BB96F8 | PRIMARY KEY | | Albums | PK__Albums__97B4BE379FC780BD | PRIMARY KEY | | Albums | FK_Albums_Artists | FOREIGN KEY | | Albums | FK_Albums_Genres | FOREIGN KEY | +--------------+-------------------------------+-------------------+
Chế độ xem này không cung cấp tên cột, nhưng nó cung cấp loại ràng buộc. Do đó, bạn có thể thu hẹp kết quả thành chỉ khóa ngoài:
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';
Kết quả:
+--------------+-------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------+-------------------| | Albums | FK_Albums_Artists | FOREIGN KEY | | Albums | FK_Albums_Genres | FOREIGN KEY | +--------------+-------------------+-------------------+
Dưới đây là một ví dụ sử dụng ký tự đại diện (*
) để trả về tất cả dữ liệu cho các ràng buộc khóa ngoại được áp dụng cho
Album
bảng:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Albums' AND CONSTRAINT_TYPE = 'FOREIGN KEY';
Kết quả:
-[ RECORD 1 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_TYPE | FOREIGN KEY IS_DEFERRABLE | NO INITIALLY_DEFERRED | NO -[ RECORD 2 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_TYPE | FOREIGN KEY IS_DEFERRABLE | NO INITIALLY_DEFERRED | NO
Ví dụ 7 - Chế độ xem hệ thống sys.foreign_keys
sys.foreign_keys
chế độ xem hệ thống chứa một hàng cho mỗi đối tượng là FOREIGN KEY
ràng buộc, với sys.object.type = F
(“F” là “Khoá ngoại”).
Ví dụ:
SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Column' FROM sys.foreign_keys;
Kết quả:
+-------------------+---------+---------------------+ | Constraint | Table | Referenced Column | |-------------------+---------+---------------------| | FK_Albums_Artists | Albums | Artists | | FK_Albums_Genres | Albums | Genres | +-------------------+---------+---------------------+
Đây là khi trả về tất cả dữ liệu cho FK_Albums_Artists
khóa ngoại:
SELECT * FROM sys.foreign_keys WHERE name = 'FK_Albums_Artists';
Kết quả:
name | FK_Albums_Artists object_id | 981578535 principal_id | NULL schema_id | 1 parent_object_id | 949578421 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.380 modify_date | 2019-05-02 12:56:06.380 is_ms_shipped | 0 is_published | 0 is_schema_published | 0 referenced_object_id | 885578193 key_index_id | 1 is_disabled | 0 is_not_for_replication | 0 is_not_trusted | 0 delete_referential_action | 0 delete_referential_action_desc | NO_ACTION update_referential_action | 0 update_referential_action_desc | NO_ACTION is_system_named | 0
Ví dụ 8 - Chế độ xem hệ thống sys.foreign_key_columns
sys.foreign_key_columns
chế độ xem hệ thống chứa một hàng cho mỗi cột hoặc tập hợp các cột bao gồm khóa ngoại.
Ví dụ:
SELECT OBJECT_NAME(constraint_object_id) AS 'Foreign Key', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_key_columns;
Kết quả:
+--------------------+---------+--------------------+ | Foreign Key | Table | Referenced Table | |--------------------+---------+--------------------| | FK_Albums_Artists | Albums | Artists | | FK_Albums_Genres | Albums | Genres | | FK_Artists_Country | Artists | Country | +--------------------+---------+--------------------+
Và đây là khi trả về tất cả dữ liệu cho FK_Albums_Artists
khóa ngoại:
SELECT * FROM sys.foreign_key_columns WHERE OBJECT_NAME(constraint_object_id) = 'FK_Albums_Artists';
Kết quả:
constraint_object_id | 981578535 constraint_column_id | 1 parent_object_id | 949578421 parent_column_id | 4 referenced_object_id | 885578193 referenced_column_id | 1
Ví dụ 9 - Chế độ xem hệ thống sys.objects
sys.objects
chế độ xem hệ thống chứa một hàng cho mỗi đối tượng phạm vi lược đồ, do người dùng xác định, được tạo trong cơ sở dữ liệu. Vì vậy, nó bao gồm thông tin về các khóa ngoại của chúng tôi.
Ví dụ:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name FROM sys.objects WHERE type = 'F';
Kết quả:
+---------+-------------------+ | Table | name | |---------+-------------------| | Albums | FK_Albums_Artists | | Albums | FK_Albums_Genres | +---------+-------------------+
Trong ví dụ này, tôi đã thu hẹp kết quả chỉ thành các khóa ngoại (nhập F
).
Đây là một ví dụ trả về tất cả dữ liệu cho FK_Albums_Artists khóa ngoại:
SELECT * FROM sys.objects WHERE name = 'FK_Albums_Artists';
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- name | FK_Albums_Artists object_id | 981578535 principal_id | NULL schema_id | 1 parent_object_id | 949578421 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.380 modify_date | 2019-05-02 12:56:06.380 is_ms_shipped | 0 is_published | 0 is_schema_published | 0
Ví dụ 10 - Thủ tục lưu trữ hệ thống sp_helpconstraint
sp_helpconstraint
hệ thống lưu trữ thủ tục trả về danh sách tất cả các loại ràng buộc, tên do người dùng xác định hoặc do hệ thống cung cấp, các cột mà chúng đã được xác định và biểu thức xác định ràng buộc (đối với DEFAULT
và CHECK
chỉ ràng buộc).
Do đó, bạn có thể sử dụng nó để trả về thông tin về khóa ngoại trong cơ sở dữ liệu của mình.
Ví dụ:
EXEC sp_helpconstraint Albums;
Kết quả:
+---------------+ | Object Name | |---------------| | Albums | +---------------+ -[ RECORD 1 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Artists delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | ArtistId -[ RECORD 2 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Artists (ArtistId) -[ RECORD 3 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Genres delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | GenreId -[ RECORD 4 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Genres (GenreId) -[ RECORD 5 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Albums__97B4BE379FC780BD delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | AlbumId
Ví dụ 11 - Thủ tục lưu trữ hệ thống sp_help
sp_help
hệ thống lưu trữ thủ tục báo cáo thông tin về một đối tượng cơ sở dữ liệu (bất kỳ đối tượng nào được liệt kê trong sys.sysobjects
chế độ xem tương thích), kiểu dữ liệu do người dùng xác định hoặc kiểu dữ liệu. Điều này bao gồm thông tin về khóa ngoại.
Khi bạn chạy điều này mà không có bất kỳ đối số nào, nó cung cấp thông tin về thông tin tóm tắt của tất cả các loại đối tượng tồn tại trong cơ sở dữ liệu hiện tại được trả về (tức là a lot thông tin).
Tuy nhiên, bạn có thể cung cấp tên của một bảng và nó sẽ trả về thông tin về bảng đó. Một lần nữa, bạn sẽ nhận được rất nhiều thông tin được trả về, nhưng trong số đó sẽ là thông tin khóa ngoại.
Ví dụ:
EXEC sp_help Albums;
Kết quả:
+--------+---------+------------+-------------------------+ | Name | Owner | Type | Created_datetime | |--------+---------+------------+-------------------------| | Albums | dbo | user table | 2019-05-02 12:56:06.370 | +--------+---------+------------+-------------------------+ -[ RECORD 1 ]------------------------- Column_name | AlbumId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 2 ]------------------------- Column_name | AlbumName Type | nvarchar Computed | no Length | 510 Prec | Scale | Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | SQL_Latin1_General_CP1_CI_AS -[ RECORD 3 ]------------------------- Column_name | ReleaseDate Type | date Computed | no Length | 3 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 4 ]------------------------- Column_name | ArtistId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 5 ]------------------------- Column_name | GenreId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL +------------+--------+-------------+-----------------------+ | Identity | Seed | Increment | Not For Replication | |------------+--------+-------------+-----------------------| | AlbumId | 1 | 1 | 0 | +------------+--------+-------------+-----------------------+ +-------------------------------+ | RowGuidCol | |-------------------------------| | No rowguidcol column defined. | +-------------------------------+ +-----------------------------+ | Data_located_on_filegroup | |-----------------------------| | PRIMARY | +-----------------------------+ +------------------------------+---------------------------------------------------+--------------+ | index_name | index_description | index_keys | |------------------------------+---------------------------------------------------+--------------| | PK__Albums__97B4BE379FC780BD | clustered, unique, primary key located on PRIMARY | AlbumId | +------------------------------+---------------------------------------------------+--------------+ -[ RECORD 1 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Artists delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | ArtistId -[ RECORD 2 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Artists (ArtistId) -[ RECORD 3 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Genres delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | GenreId -[ RECORD 4 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Genres (GenreId) -[ RECORD 5 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Albums__97B4BE379FC780BD delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | AlbumId