Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

11 cách trả về khóa ngoại trong cơ sở dữ liệu máy chủ SQL bằng T-SQL

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 DEFAULTCHECK 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất SQL Server IN so với EXISTS

  2. CHÈN VÀO VÀ CHỌN VÀO

  3. Bảng chú giải thuật ngữ truy vấn SQL Server - A Stick Shift cho DBA

  4. JSON_QUERY () Ví dụ trong SQL Server (T-SQL)

  5. 3 cách lấy tên tháng từ ngày trong SQL Server (T-SQL)