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 đó.