SQLサーバーインスタンスのすべてのデータベースで実行されるクエリを作成する必要があります。追加の制約は、クエリは、特別な列を持つ特別なテーブルを含むデータベースでのみ実行する必要があるということです。背景として、一部のデータベースでは、特別なテーブルに特別な列があります(ありません)。
このソリューションに基づいて、これまで私が持っていたのは、特定のテーブルを含むデータベースでのみ実行されるクエリです。
SELECT *
FROM sys.databases
WHERE DATABASEPROPERTY(name, 'IsSingleUser') = 0
AND HAS_DBACCESS(name) = 1
AND state_desc = 'ONLINE'
AND CASE WHEN state_desc = 'ONLINE'
THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[CERTAIN_TABLE]', 'U')
END IS NOT NULL
ただし、まだ不足しているのは、クエリがテーブルCERTAIN_TABLE
に特定の列があるデータベースのみを選択する必要があるという制約です。これはどのように達成できますか?
すべてのデータベースをループしたいときは、次のようなループを実行します。従うのは簡単です:
DECLARE @dbs TABLE ( dbName NVARCHAR(100) )
DECLARE @results TABLE ( resultName NVARCHAR(100) )
INSERT INTO @dbs
SELECT name FROM sys.databases
DECLARE @current NVARCHAR(100)
WHILE (SELECT COUNT(*) FROM @dbs) > 0
BEGIN
SET @current = (SELECT TOP 1 dbName FROM @dbs)
INSERT INTO @results
EXEC
(
'IF EXISTS(SELECT 1 FROM "' + @current + '".INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ''Target_Table_Name'' AND COLUMN_NAME = ''Target_Column_Name'')
BEGIN
--table and column exists, execute query here
SELECT ''' + @current + '''
END'
)
DELETE FROM @dbs
WHERE dbName = @current
END
SELECT * FROM @results
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加