Stored-Procedures
通過 SQL Server 2000 實例中所有數據庫的名稱描述引用儲存過程
在 SQL Server 2000 實例中的所有數據庫中,是否有人有有效的方法來引用系統資訊來搜尋儲存過程?我目前的任務是將水晶報表遷移到 SSRS,客戶大約有 500 個或更多水晶報表,其中儲存過程分佈在多個數據庫中。我知道我可以按文本過濾每個數據庫的可程式性文件夾,但我正在尋找一個結果,我可以在其中查詢 master.dbo.sysdatabases 並將其引用到 syscomments 中,我可以在其中指定文本並找到與數據庫相關的儲存過程。
只需使用游標遍歷數據庫並查詢 sysobjects 表:
Select * from sysobjects where type='P' and name='StoredProcName'
(不包括游標程式碼。)或使用(未記錄)
sp_MSforeachdb
:EXEC sp_MSforeachdb 'USE ? SELECT ''?'' as dbname, name FROM sysobjects WHERE type = ''P'' AND name = ''StoredProcName''
(不過,不要把它分成兩行)
此外,sp_MSforeachdb 存在已知問題,例如在很長的數據庫名稱上失敗,所以我通常更喜歡游標。
如果有人好奇游標程式碼的外觀,請參閱此 MSDN 文章:
DECLARE @SearchString VARCHAR(255) DECLARE @name VARCHAR(50) DECLARE @db_name1 VARCHAR(50) DECLARE @db_name2 VARCHAR(50) DECLARE @sql VARCHAR(100) SET @SearchString = 'a_ras_Arlenes_ship_sched_sp' DECLARE db_cursor CURSOR FOR SELECT name FROM MASTER.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb') OPEN db_cursor FETCH NEXT FROM db_cursor WITH (NOLOCK) INTO @name While @@FETCH_STATUS = 0 BEGIN SET @db_name1 =@name+'.dbo.syscomments' SET @db_name2 =@name+'.dbo.sysobjects' SELECT @sql = 'SELECT DISTINCT b.name FROM ' + @db_name1 + ' a JOIN ' + @db_name2 + ' b ON a.id = b.id' +' WHERE a.text like %' + @SearchString + '% ORDER BY b.name' EXEC(@sql) FETCH NEXT FROM db_cursor WITH (NOLOCK) INTO @name END Close db_cursor DEALLOCATE db_cursor