Mặc dù cực kỳ mạnh mẽ như một cơ sở dữ liệu quan hệ, nhưng đôi khi SQL Server có thể hơi khó khăn khi tra cứu thông tin cơ bản về chính hệ thống cơ sở dữ liệu.
Để giảm bớt phần nào những vấn đề đau đầu này, chúng ta sẽ khám phá ngắn gọn cách tìm tất cả các bảng trong cơ sở dữ liệu có chứa tên cột cụ thể .
Lượt xem Danh mục Máy chủ SQL
Một khái niệm cơ bản cần hiểu về SQL Server là catalog views
, là các bảng cơ sở dữ liệu hiệu quả (catalogs
trong trường hợp này) hiển thị thông tin toàn hệ thống về Công cụ cơ sở dữ liệu máy chủ SQL.
Truy vấn thông tin hệ thống
Tất cả catalog views
được truy cập qua SELECT
Câu lệnh SQL FROM
một danh mục cụ thể trong sys.
không gian tên.
Ví dụ:câu lệnh sau có thể được sử dụng để xem thông tin về tất cả các bảng cơ sở dữ liệu trong hệ thống qua sys.tables
danh mục:
SELECT
*
FROM
sys.tables
Câu lệnh LIKE và Ký tự đại diện
Trước khi tìm hiểu cách trích xuất tất cả các bảng với một tên cụ thể, chúng ta nên khám phá ngắn gọn LIKE
là gì câu lệnh cũng như ký tự đại diện (%
) và cách chúng được sử dụng cùng nhau.
LIKE
được sử dụng trong một truy vấn để xác định xem một mẫu ký tự cụ thể (thường là các giá trị của một column
được chỉ định ) khớp với một chuỗi ký tự được định dạng.
LIKE
cũng thường được sử dụng cùng với %
, đại diện cho một ký tự đại diện khi cố gắng khớp với mẫu. Khi một %
ký tự đại diện có trong chuỗi mẫu, nó chỉ ra rằng bất kỳ các ký tự có thể hiện diện ở vị trí đó của chuỗi mẫu và vẫn được coi là khớp.
Ví dụ:nếu chúng tôi muốn tìm tất cả các sách có title
bắt đầu với “The” nhưng có thể chứa bất kỳ ký tự nào sau đó, chúng tôi sẽ sử dụng một câu lệnh như sau:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Những độc giả tinh ý có thể nhận ra rằng mẫu trên không chỉ phù hợp với tiêu đề có chữ “The” ở đầu mà còn với bất kỳ tiêu đề nào có các từ bắt đầu bằng ba chữ cái “The”. Kể từ %
các ký tự đại diện khớp với bất kỳ ký tự nào, nếu chúng tôi chỉ muốn kiểm tra các tiêu đề có từ “The”, việc thêm một khoảng trắng sẽ thích hợp hơn:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Chọn Bảng Chứa Tên Cột
Với kiến thức cơ bản của chúng tôi về cả catalog views
và LIKE
, chúng tôi hiện được trang bị để tra cứu tất cả các bảng trong hệ thống của chúng tôi có chứa một tên cột cụ thể:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name = 'ColumnName'
Chúng tôi cần kết hợp thông tin từ hai danh mục, sys.tables
và sys.columns
, vì vậy chúng tôi đang sử dụng JOIN
tuyên bố. Cả hai được liên kết bởi object_id
trường, vì vậy chúng tôi JOIN
trên trường đó.
Từ đó, chỉ cần chọn ColumnName
và TableName
kết quả của chúng tôi và cuối cùng, tất nhiên, chỉ tìm kiếm các bản ghi trong đó sys.columns.name
bằng với ColumnName
của chúng tôi chuỗi.
Tuy nhiên, truy vấn này sẽ chỉ tìm thấy các kết quả phù hợp chính xác của tên cột. Nếu chúng ta muốn tìm các kết quả phù hợp từng phần, chúng ta có thể sử dụng LIKE
và %
các ký tự đại diện thay thế:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name LIKE '%ColumnName%'
Chúng tôi có nó! Một truy vấn đơn giản để tra cứu tất cả các bảng và cột được liên kết với một tên cột cụ thể (hoặc tương tự) trong đó.