データベースがSQL-Serverの同じインスタンス上にある場合は、sp_msforeachdbを使用してデータベースを反復処理できます。
CREATE TABLE #tmp (DatabaseName VARCHAR(50), Version VARCHAR(200));
EXECUTE master.sys.sp_MSforeachdb '
USE [?];
IF EXISTS
( SELECT 1
FROM sys.tables
WHERE [Object_ID] = OBJECT_ID(N''dbo.DBVersion'')
)
BEGIN
INSERT #tmp (DatabaseName, Version)
SELECT ''?'', [Version]
FROM dbo.DBVersion
END';
SELECT *
FROM #tmp;
DROP TABLE #tmp;
文書化されていない手順の使用には懐疑的な見方があるため、カーソルを使用してこれを書き直すことができます。
CREATE TABLE #tmp (DatabaseName VARCHAR(50), Version VARCHAR(200));
DECLARE DBCursor CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY
FOR
SELECT Name
FROM sys.databases;
OPEN DBCursor;
DECLARE @DBName VARCHAR(200) = '';
FETCH NEXT FROM DBCursor INTO @DBName;
WHILE @@FETCH_STATUS != 0
BEGIN
DECLARE @SQL NVARCHAR(MAX) = N'USE ' + QUOTENAME(@DBName) + '
IF EXISTS
( SELECT 1
FROM sys.tables
WHERE [Object_ID] = OBJECT_ID(N''dbo.DBVersion'')
)
BEGIN
INSERT #tmp (DatabaseName, Version)
SELECT @DB, [Version]
FROM dbo.DBVersion
END';
EXECUTE SP_EXECUTESQL @SQL, N'@DB VARCHAR(200)', @DBName;
FETCH NEXT FROM DBCursor INTO @DBName;
END
CLOSE DBCursor;
DEALLOCATE DBCursor;
SELECT *
FROM #tmp;
DROP TABLE #tmp;