0
如何刪除特定模式下的所有視圖。例如:刪除特定模式下的所有視圖 - SQL
例如:如果我在db中獲得低於視圖。
[dbo].[view1]
[dbo].[veiw2]
[dbo].[view3]
[myView].[view1]
[myView].[veiw2]
[myView].[view3]
我只想一次全部刪除架構myView下的所有視圖。
如何刪除特定模式下的所有視圖。例如:刪除特定模式下的所有視圖 - SQL
例如:如果我在db中獲得低於視圖。
[dbo].[view1]
[dbo].[veiw2]
[dbo].[view3]
[myView].[view1]
[myView].[veiw2]
[myView].[view3]
我只想一次全部刪除架構myView下的所有視圖。
嘗試這種情況:
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';
這考慮到模式,使用中的系統表,並將其輸出到隨後可以執行的變量。這樣你就不會遇到你的選擇截斷你的腳本的問題,因爲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)
感謝AlSher它的工作原理。剛將sc.name = [myView]更改爲sc.name ='myView' – Sreedhar
@Nev_Rahd:您還應該記住,這將與通常需要分隔的名稱打破。所以,爲了安全起見,分別用'QUOTENAME(sc.name)'和'QUOTENAME(obj.name)'代替'sc.name'和'obj.name'。 –
@AndriyM:謝謝你是對的。 – Sreedhar