用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
2014-03-04 17:08
573 查看
USE MASTER GO if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#tmpResult')) begin drop table #tmpResult end if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#tmpResultErrorMsg')) begin drop table #tmpResultErrorMsg end create table #tmpResult ( [ObjectName] varchar(100), [Type] varchar(10), [TypeDesc] varchar(100), [DbName] varchar(100) ) create table #tmpResultErrorMsg ( [UserAccount] varchar(50), [DbName] varchar(50), [ShortIssue] varchar(20), [ErrorMsg] varchar(500) ) go DECLARE @dbname VARCHAR(100) DECLARE @sql VARCHAR(4000) DECLARE @searchKeyword VARCHAR(100) SET @searchKeyword='GMPI' DECLARE @sErrorMsg VARCHAR(500) DECLARE @sUserAccount VARCHAR(50) DECLARE @sShortIssue VARCHAR(20) DECLARE dbname_cursor SCROLL CURSOR FOR Select Name FROM Master..SysDatabases order by Name OPEN dbname_cursor FETCH next FROM dbname_cursor INTO @dbname WHILE @@fetch_status=0 BEGIN FETCH next FROM dbname_cursor INTO @dbname set @sql='USE ' + @dbname set @sql=@sql + ' insert into #tmpResult SELECT OBJECT_NAME(sm.object_id) AS ObjectName, o.type as Type , o.type_desc as TypeDesc,'''+ @dbname + ''' AS DbName FROM sys.sql_modules AS sm JOIN sys.objects AS o ON sm.object_id = o.object_id WHERE UPPER(sm.definition) LIKE ''%' + UPPER(@searchKeyword) + '%'' ORDER BY o.type' BEGIN try EXEC(@sql) --PRINT @SQL END TRY BEGIN CATCH IF(@@ERROR<>0) BEGIN PRINT ERROR_MESSAGE() SET @sErrorMsg= ERROR_MESSAGE() DECLARE @iStartPos int=charindex('The server principal "',@sErrorMsg) DECLARE @iEndPos int=charindex('" is not able to access',@sErrorMsg) if(@iStartPos>0 and @iEndPos>0) begin SET @sUserAccount=SUBSTRING(@sErrorMsg,@iStartPos + len('The server principal "'),@iEndPos-@iStartPos-len('" is not able to access')+1) SET @sShortIssue ='Permission Access' end else begin SET @sShortIssue ='Other' end --SET @iStartPos=charindex('the database "',@sErrorMsg) --SET @iEndPos=charindex('" under the current security context.',@sErrorMsg) --SET @sDbName=SUBSTRING(@sErrorMsg,@iStartPos,@iEndPos-@iStartPos) --@dbname insert into #tmpResultErrorMsg select @sUserAccount,@dbname,@sShortIssue,@sErrorMsg END END catch END CLOSE dbname_cursor DEALLOCATE dbname_cursor GO select * from tempdb..#tmpResult order by Type select * from tempdb..#tmpResultErrorMsg drop table #tmpResult drop table #tmpResultErrorMsg
相关文章推荐
- 查询某台服务器下所有的数据库中包含某个关键词的存储过程 或 视图
- 初学mysql(十)-数据库之存储过程、函数与游标-自定义函数和流程控制(下)
- SQL-SERVER数据库中的游标、存储过程和触发器 关键词 SQL-SERVER、游标、存储过程、触发器、高效处理数据
- MySQL 第八篇:自定义函数、存储过程、游标
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
- 初学mysql(九)-数据库之存储过程、函数与游标(上)
- Oracle数据库开发之存储过程和自定义函数
- 取汉字拼音首字母的存储过程--很值得收藏的数据库自定义函数
- sql server查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- SQL : 如何完全复制一个服务器上的数据库A到另一个服务器上的数据库B(包括库A的所有表、试图、存储过程等等)
- 数据库-存储过程-游标-函数
- 查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- 用游标遍历某台服务器下所有的数据库中某个字段所在的表名及数据库名
- mysql存储过程利用游标查询每个数据库的所有表
- 删除数据库中所有存储过程和函数的sql语句
- 查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- sqlserver存储过程中利用游标遍历结果集简单示例及查询数据库时间
- 通过游标遍历数据库中的用户表,找出所有含有NULL值字段的表名和字段名
- 一个查询数据库所有表的存储过程(允许按表名模糊查询一级按显示数量进行分页)
- navicat 导出数据库 存储过程 函数