Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намиране на обект в SQL Server (кръстосана база данни)

Има схема, наречена INFORMATION_SCHEMA schema, която съдържа набор от изгледи на таблици от SYS схемата, към които можете да правите заявки, за да получите това, което искате.

Основен плюс на INFORMATION_SCHEMA е, че имената на обектите са много удобни за заявки и четими от потребителя. Недостатъкът на INFORMATION_SCHEMA е, че трябва да напишете една заявка за всеки тип обект.

Схемата на Sys може първоначално да изглежда малко загадъчна, но тя съдържа цялата информация (и повече) на едно място.

Ще започнете с таблица, наречена SysObjects (всяка база данни има такава), която съдържа имената на всички обекти и техните типове.

Човек може да търси в база данни, както следва:

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

Сега, ако искате да ограничите това само до търсене на таблици и съхранени процедури, бихте направили

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

Ако потърсите типове обекти, ще намерите цял списък за изгледи, тригери и т.н.

Сега, ако искате да търсите това във всяка база данни, ще трябва да преминете през базите данни. Можете да направите едно от следните:

Ако искате да търсите във всяка база данни без никакви клаузи, тогава използвайте sp_MSforeachdb, както е показано в отговор тук.

Ако искате да търсите само в конкретни бази данни, използвайте командата "USE DBName" и след това търсене.

Ще имате голяма полза от параметризирането му в този случай. Имайте предвид, че името на базата данни, в която търсите, ще трябва да бъде заменено във всяка заявка (DatabaseOne, DatabaseTwo...). Вижте това:

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. Събиране на данни за производителността с помощта на инструмента SQLDiag | Отстраняване на проблеми с производителността на SQL Server -6

  2. Намиране на предишната ненулева стойност от подреден по дата списък

  3. Използвайте TYPEPROPERTY() за връщане на информация за тип данни в SQL Server

  4. Каква е добра идея за запазване на данни от чат в база данни?

  5. SQL Server - Какво се случва, когато се актуализира ред в таблица?