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

Cách tìm bảng chứa một cột cụ thể trong SQL Server

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 viewsLIKE , 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.tablessys.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 ColumnNameTableName 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% 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 đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương pháp tốt nhất để truyền các tham số cho SQLCommand là gì?

  2. Cách hàm RIGHT () hoạt động trong SQL Server (T-SQL)

  3. Hướng dẫn sử dụng SQL Server - Mọi thứ bạn cần để thành thạo Transact-SQL

  4. SqlDependency không kích hoạt sự kiện OnChange khi tập dữ liệu được thay đổi

  5. Tại sao chọn SCOPE_IDENTITY () trả về số thập phân thay vì số nguyên?