サーバー上のほとんどのデータベースから特定のビューを削除しようとしています。私は現在持っているものを貼り付けました。それは正常に完了しますが、実際にはビューを削除しません。サーバー上のすべてのデータベースからビューを削除するには
私は何が失われていますか、なぜそれはエラーではなく、実際にビューを削除しないでしょうか?また、特定のデータベースでexec文を実行すると、ビューが削除されます。
USE [Master]
DECLARE @DBname VARCHAR (128);
DECLARE @NumDBs INT;
DECLARE @Count INT = 0;
DECLARE getDBs CURSOR
FOR
SELECT name
FROM sys.databases
WHERE name NOT IN ('DBName1','DBName2')
ORDER BY name;
SET @NumDBs = (SELECT COUNT(9) FROM sys.databases WHERE
name NOT IN ('DBName1','DBName2'))
;
OPEN getDBs
FETCH NEXT FROM getDBs
INTO @DBname;
WHILE (@Count < @NumDBs)
BEGIN
Exec('IF EXISTS (SELECT *
FROM '[email protected]+'.sys.views
WHERE object_id= OBJECT_ID(N''[ViewName]''))
DROP VIEW [ViewName]'
);
SET @Count = @Count + 1;
FETCH NEXT FROM getDBs
INTO @DBname;
END;
CLOSE getDBs;
DEALLOCATE getDBs;
'..DROP VIEW '+ @ DBNAME +' .dbo。[ビュー名] ...'それは私がそれを試してみた3部構成の名前のdbname.schemaname.objectname – Serg
でなければなりません。次のエラーが表示されます。 'DROP VIEW'では、オブジェクト名の接頭辞としてデータベース名を指定することはできません。 – Bgonzales
sp_MSForEachDBはどうですか?または「USE database1」を使用してカーソルを更新してコンテキストを特定のデータベースに設定する –