Sql server 2008 正在删除特定模式下的所有视图-SQL

Sql server 2008 正在删除特定模式下的所有视图-SQL,sql-server-2008,Sql Server 2008,如何删除特定架构下的所有视图 例:如果我在数据库中得到以下视图 [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 ob

如何删除特定架构下的所有视图

例:如果我在数据库中得到以下视图

[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截断脚本的问题,因为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)
为寻找特定解决方案的人重新发布。将下拉视图代码放入WHILE循环,如下所示:

DECLARE @name VARCHAR(128) 
DECLARE @SQL VARCHAR(254)
DECLARE @schema VARCHAR(128)

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name]) 
SELECT @schema = (SELECT TOP 1 schema_name(schema_id) FROM sys.views WHERE [name] = @name)

WHILE @name IS NOT NULL 
BEGIN 
    SELECT @SQL = 'DROP VIEW [' + @schema + '].[' + RTRIM(@name) +']' 
    EXEC (@SQL) 
    PRINT 'Dropped View: ' + @name 
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name]) 
    SELECT @schema = (SELECT TOP 1 schema_name(schema_id) FROM sys.views WHERE [name] = @name)
END 
GO

我有很多视图,所以,只需将drop查询聚合到一个nvarcharmax就不行了-查询被截断了。我想删除一些视图

在这个例子中,我想删除从usr_*开始的每个模式中的每个视图,但不包括usr_test、usr_usr、usr_usr1、usr_usr2和usr_usr3

使用光标是因为我不在乎速度。这个清理查询是在集成测试之前使用的,它的速度并不关键,但它的性能非常好

声明的drop\u view\u光标 选择“下拉视图”+QUOTENAMEsys.schemas.name+”。+QUOTENAMEsys.views.name+”;“ 从sys.views sys.schemas.schema_id=sys.views.schema_id上的内部联接sys.schemas 其中sys.schemas.schema_id位于 选择s.schema\u id 从sys.schemas作为 其中s.name如'usr_uu%'和s.name不在'usr_test'、'usr_usr'、'usr_usr1'、'usr_usr2'、'usr_usr3'中 声明@sql nvarcharmax 打开下拉视图光标 从drop\u view\u游标获取下一个到@sql 而@@FETCH\u STATUS=0 开始 exec@sql 从drop\u view\u游标获取下一个到@sql 终止 关闭下拉视图光标 取消分配拖放视图光标
谢谢,她成功了。刚刚将sc.name=[myView]更改为sc.name='myView'@Nev_Rahd:您还应该记住,这将与通常需要分隔的名称相冲突。因此,为了安全起见,只需将sc.name和obj.name分别替换为QUOTENAMEsc.name和QUOTENAMEobj.name。如果有很多视图,select将截断字符串。