簡體   English   中英

如果給出了SQL Server對象列表,如何確定每個對象駐留在哪些數據庫中?

[英]If given a list of SQL Server objects, how can I determine which databases each object resides in?

我有200多個數據庫對象的列表。 所有這些都是表,存儲過程和視圖。

所有這些對象都存在於特定的SQL Server上,但是沒有為我提供一個字段來指定每個對象所屬的數據庫。

給定特定服務器上某處存在的數據庫對象列表,如何查詢服務器以提供每個對象的包含數據庫名稱?

我有一個類似的問題,這對我有用:

-- List of objects .. store in a table somewhere with
-- a db column set to an empty string
create table tempdb.dbo._mylist ( name nvarchar(500), db nvarchar(500) )
insert tempdb.dbo._mylist values ('obj 1', '')
insert tempdb.dbo._mylist values ('obj 2', '')

-- Setup cursor for databases
DECLARE db_cursor CURSOR FOR
   SELECT name from sys.databases WHERE [state] != 6 -- OFFLINE

-- Loop through cursor
OPEN db_cursor;
DECLARE @dbname sysname;
FETCH NEXT FROM db_cursor INTO @dbname;
WHILE (@@FETCH_STATUS <> -1)
BEGIN;
    -- added dbname to object list if found (joined using common collation)
   EXECUTE ('use ' + @dbname + '; update l set db = db + '';' + @dbname + ''' from tempdb.dbo._mylist l join sysobjects o on o.name = l.name COLLATE SQL_Latin1_General_CP1_CI_AS;');
   FETCH NEXT FROM db_cursor INTO @dbname;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
GO

-- Select results
select name, db = isnull(stuff(db,1,1,''), '') from tempdb.dbo._mylist

-- Cleanup
drop table  tempdb.dbo._mylist

您可以使用SP_MSFOREACHDB存儲過程編寫腳本來執行此操作。 您可以在此處找到示例。這基本上使您可以對所有數據庫運行腳本。

例如,下面的語句將允許您搜索表名,並且還將返回關聯的數據庫名。

  EXEC sp_Msforeachdb "USE [?]; SELECT '[?]' databaseName, * FROM sys.tables WHERE name = 'table_name'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM