CURSORS も sp_msforeachdb も使用しないソリューションが望ましいと思います。
以下の解決策はアイデアを提供するものであり、それを自分のニーズに適応させることができます。
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO BEGIN TRY SET NOCOUNT ON SET DATEFORMAT DMY SET DEADLOCK_PRIORITY NORMAL; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED DECLARE @log NVARCHAR(MAX) ,@vCrlf CHAR(2); SELECT @log = '' ,@vCrlf = CHAR(13)+CHAR(10); DECLARE @SQL NVARCHAR(MAX) BEGIN TRY DROP TABLE #OBJECTS END TRY BEGIN CATCH END CATCH CREATE TABLE #OBJECTS( DB_ID INT, OBJECT_ID INT, S_NAME SYSNAME, NAME SYSNAME, ROW_COUNT INT, STATISTICS_UPDATED DATETIME) SELECT @SQL = ' SELECT db_id=db_id(), o.object_id, s_name=s.name, o.name, ddps.row_count ,[Statistics_Updated]=STATS_DATE(I.OBJECT_ID,I.INDEX_ID) FROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID INNER JOIN sys.schemas s ON s.schema_id = o.schema_id INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID AND i.index_id = ddps.index_id WHERE i.index_id < 2 AND o.is_ms_shipped = 0 ' set @SQL = ( SELECT STUFF( (SELECT N' ' + ' USE ' + QUOTENAME(name) +';' + @vCrlf + @SQL + @vCrlf FROM SYS.DATABASES SD WHERE SD.STATE_DESC = 'ONLINE' -->Skips the database if it is not online AND SD.COMPATIBILITY_LEVEL > 80 AND SD.database_id > 3 -- NO MASTER NOR TEMPDB NOR MODEL FOR XML PATH(''),TYPE) .value('text()[1]','nvarchar(max)'),1,2,N'') ) INSERT INTO #OBJECTS ( [db_id], [object_id], [s_name], [name], [row_count], [Statistics_Updated] ) EXECUTE MASTER.DBO.sp_executesql @SQL SELECT * FROM #OBJECTS --WHERE NAME = 'THE NAME THAT I AM LOOKING FOR' END TRY BEGIN CATCH PRINT '--EXCEPTION WAS CAUGHT--' + CHAR(13) + 'THE ERROR NUMBER:' + COALESCE(CAST ( ERROR_NUMBER() AS VARCHAR), 'NO INFO') + CHAR(13) PRINT 'SEVERITY: ' + COALESCE(CAST ( ERROR_SEVERITY() AS VARCHAR), 'NO INFO') + CHAR(13) + 'STATE: ' + COALESCE(CAST ( ERROR_STATE() AS VARCHAR), 'NO INFO') + CHAR(13) PRINT 'PROCEDURE: ' + COALESCE(CAST ( COALESCE(ERROR_PROCEDURE(),'NO INFO') AS VARCHAR), 'NO INFO') + CHAR(13) + 'LINE NUMBER: ' + COALESCE(CAST ( ERROR_LINE() AS VARCHAR), 'NO INFO') + CHAR(13) PRINT 'ERROR MESSAGE: ' PRINT CAST ( COALESCE(ERROR_MESSAGE(),'NO INFO') AS NTEXT) END CATCH;
プレ>