您可以使用sp_msforeachdb到itereate數據庫,如果他們在SQL-服務器
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, TableName)
SELECT ''?'', [Version]
FROM dbo.DBVersion
END';
SELECT *
FROM #tmp;
DROP TABLE #tmp;
相同的實例有一個關於使用無證程序,所以你可以用光標改寫這個有些sceptisism:
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, TableName)
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;
所有這些數據庫都在同一個SQL-Server實例上嗎? – GarethD