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

Tìm một đối tượng trong SQL Server (cơ sở dữ liệu chéo)

Có một lược đồ được gọi là INFORMATION_SCHEMA lược đồ chứa một tập hợp các chế độ xem trên các bảng từ lược đồ SYS mà bạn có thể truy vấn để có được những gì bạn muốn.

Ưu điểm chính của INFORMATION_SCHEMA là tên đối tượng rất thân thiện với truy vấn và người dùng có thể đọc được. Nhược điểm của INFORMATION_SCHEMA là bạn phải viết một truy vấn cho mỗi loại đối tượng.

Ban đầu, lược đồ Sys có vẻ hơi khó hiểu, nhưng nó có tất cả thông tin giống nhau (và nhiều thông tin khác) ở một vị trí duy nhất.

Bạn sẽ bắt đầu với một bảng có tên SysObjects (mỗi cơ sở dữ liệu có một) có tên của tất cả các đối tượng và kiểu của chúng.

Người ta có thể tìm kiếm trong cơ sở dữ liệu như sau:

Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
    and [Name] like '%YourObjectName%'

Bây giờ, nếu bạn muốn giới hạn điều này để chỉ tìm kiếm các bảng và tài liệu được lưu trữ, bạn sẽ thực hiện

Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
    and [Name] like '%YourObjectName%'
    and Type in ('U', 'P')

Nếu bạn tra cứu các loại đối tượng, bạn sẽ tìm thấy toàn bộ danh sách cho các chế độ xem, trình kích hoạt, v.v.

Bây giờ, nếu bạn muốn tìm kiếm điều này trong mỗi cơ sở dữ liệu, bạn sẽ phải lặp qua các cơ sở dữ liệu. Bạn có thể thực hiện một trong những cách sau:

Nếu bạn muốn tìm kiếm qua từng cơ sở dữ liệu mà không có bất kỳ mệnh đề nào, hãy sử dụng sp_MSforeachdb như được hiển thị trong câu trả lời tại đây.

Nếu bạn chỉ muốn tìm kiếm cơ sở dữ liệu cụ thể, hãy sử dụng lệnh "SỬ DỤNG DBName" và sau đó tìm kiếm.

Bạn sẽ được hưởng lợi rất nhiều từ việc nó được tham số hóa trong trường hợp đó. Lưu ý rằng tên của cơ sở dữ liệu bạn đang tìm kiếm sẽ phải được thay thế trong mỗi truy vấn (DatabaseOne, DatabaseTwo ...). Kiểm tra cái này:

Declare @ObjectName VarChar (100)

Set @ObjectName = '%Customer%'

Select 'DatabaseOne' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseOne.Sys.Objects
Where 1=1
    and [Name] like @ObjectName
    and Type in ('U', 'P')

UNION ALL

Select 'DatabaseTwo' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseTwo.Sys.Objects
Where 1=1
    and [Name] like @ObjectName
    and Type in ('U', 'P')

UNION ALL

Select 'DatabaseThree' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseThree.Sys.Objects
Where 1=1
    and [Name] like @ObjectName
    and Type in ('U', 'P')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kiểm tra xem một cột có tồn tại trong bảng SQL Server hay không?

  2. Làm cách nào để tiện ích mở rộng SQLSRV hoạt động với PHP, vì MSSQL không được dùng nữa?

  3. Thêm máy chủ vào SQL Management Studio

  4. Bảng Tally để chèn các ngày còn thiếu giữa hai ngày? SQL

  5. Truy xuất Mối quan hệ SQL dưới dạng một chuỗi được phân tách bằng dấu phẩy