2012-05-21 66 views
0

如何刪除特定模式下的所有視圖。例如:刪除特定模式下的所有視圖 - SQL

例如:如果我在db中獲得低於視圖。

[dbo].[view1] 
[dbo].[veiw2] 
[dbo].[view3] 
[myView].[view1] 
[myView].[veiw2] 
[myView].[view3] 

我只想一次全部刪除架構myView下的所有視圖。

回答

1

嘗試這種情況:

select 'drop view ' + QUOTENAME(sc.name) + '.' + QUOTENAME(obj.name) + ';' 
from sys.objects obj 
INNER JOIN sys.schemas sc 
ON sc.schema_id = obj.schema_id 
where obj.type='V' 
and sc.name = 'myView'; 
+0

感謝AlSher它的工作原理。剛將sc.name = [myView]更改爲sc.name ='myView' – Sreedhar

+0

@Nev_Rahd:您還應該記住,這將與通常需要分隔的名稱打破。所以,爲了安全起見,分別用'QUOTENAME(sc.name)'和'QUOTENAME(obj.name)'代替'sc.name'和'obj.name'。 –

+0

@AndriyM:謝謝你是對的。 – Sreedhar

0

這考慮到模式,使用中的系統表,並將其輸出到隨後可以執行的變量。這樣你就不會遇到你的選擇截斷你的腳本的問題,因爲Select和Print語句在它們可能返回的長度上是有限的。

在SQL Server 2008下運行:

DECLARE @DropViewCommand nVarChar(MAX) = '' 
SELECT @DropViewCommand = @DropViewCommand 
         + 'DROP VIEW '+ QUOTENAME(S.Name) + '.' + QUOTENAME(V.name) + '; ' 
    FROM sys.views as V 
    JOIN sys.schemas as S 
    ON S.schema_id = V.schema_id 
    WHERE S.name = 'dbo'--Selectively delete by Schema. Comment out to delete all views. 
PRINT @DropViewCommand--See the command used in dropping all views (will be truncated in Select/Print, but not when Executing). 
EXEC (@DropViewCommand)