vistas vista una sintaxis que para insertar eliminar datos creacion como actualizar actualizables sql sql-server-2008 sp-msforeachtable

una - Eliminar todas las vistas de Sql Server



sintaxis para eliminar una vista en mysql (8)

Aquí tienes, no necesitas cursor:

DECLARE @sql VARCHAR(MAX) = '''' , @crlf VARCHAR(2) = CHAR(13) + CHAR(10) ; SELECT @sql = @sql + ''DROP VIEW '' + QUOTENAME(SCHEMA_NAME(schema_id)) + ''.'' + QUOTENAME(v.name) +'';'' + @crlf FROM sys.views v PRINT @sql; EXEC(@sql);

Al utilizar esta declaración en SQL Server:

EXEC sp_msforeachtable ''DROP TABLE ?''

Sé que es posible eliminar todas las tablas a la vez.

¿Hay una declaración similar para las vistas? Intenté esto con la esperanza de tener suerte: EXEC sp_msforeachview ''DROP VIEW?'' ¡Pero no funciona!


Dado que ninguno de los scripts que probé a partir de las respuestas funcionó correctamente en el caso de varios esquemas, estoy incluyendo uno operativo.

--DBNAME, PUT YOU OWN ONE use SIPE_ISU

DECLARAR @viewName varchar (500) DECLARAR CURSOR PARA SELECCIONAR sk.name + ''.'' + So.name FROM sys.objects tan internal join sys.schemas sk en sk.schema_id = so.schema_id DONDE type = ''v'' OPEN OP cur FETCH NEXT DESDE cur INTO @viewName WHILE @@ fetch_status = 0 BEGIN EXEC (''DROP VIEW'' + @viewName) FETCH NEXT DESDE cur INTO @viewName FIN CERRAR CUR DEALLOCATE cur


Pero ¿qué pasa con el esquema?
El siguiente script le ayudará si las vistas son parte del esquema

DECLARE @sql VARCHAR(MAX)=''''; SELECT @sql=@sql+''DROP VIEW ''+name +'';'' FROM ( SELECT Name=[s].name + ''.'' + [v].name FROM sys.views [v] LEFT OUTER JOIN sys.schemas [s] ON ( [v].[schema_id]=[s].[schema_id] ) ) X EXEC(@sql)


Prueba este guion

DECLARE @viewName varchar(500) DECLARE cur CURSOR FOR SELECT [name] FROM sys.objects WHERE type = ''v'' OPEN cur FETCH NEXT FROM cur INTO @viewName WHILE @@fetch_status = 0 BEGIN EXEC(''DROP VIEW '' + @viewName) FETCH NEXT FROM cur INTO @viewName END CLOSE cur DEALLOCATE cur

vea aqui para mas informacion


Quería que una secuencia de comandos eliminara las vistas enlazadas del esquema en el orden de dependencia correcto, y quería que se ejecutara en SQL sys.dm_sql_referencing_entities donde sys.dm_sql_referencing_entities no está disponible. También quería poder ver el sql que se está ejecutando antes de ejecutarlo, lo que no se puede hacer con el script en la respuesta de @RicNet. Así que escribí esta consulta recursiva que usa las otras respuestas aquí como base

DECLARE @sql VARCHAR(MAX) = '''' DECLARE @crlf VARCHAR(2) = CHAR(13) + CHAR(10); ;WITH allviews as ( --just combining schema and name SELECT object_id, ''['' + SCHEMA_NAME(schema_id) + ''].['' + name + '']'' AS viewname FROM sys.views ), dependents AS ( SELECT referencing.viewname dependentname, referenced.viewname dependenton FROM sys.sql_expression_dependencies r INNER JOIN allviews referencing ON referencing.object_id = r.referencing_id INNER JOIN allviews referenced ON referenced.object_id = r.referenced_id ) , nodependents AS ( SELECT viewname name FROM allviews v LEFT JOIN dependents d ON d.dependentname = viewname WHERE d.dependentname IS NULL ) ,hierarchy AS ( --the hierarchy recurses the dependencies SELECT d.dependenton, d.dependentname, 1 tier FROM dependents d UNION ALL SELECT d.dependenton, d.dependentname, h.tier + 1 FROM dependents d INNER JOIN hierarchy h ON h.dependenton = d.dependentname --best thing I could think to stop the recursion was to --stop when we reached an item with no dependents WHERE h.dependenton NOT IN (SELECT name FROM nodependents) ), combined as ( --need to add item with no dependents back in SELECT 0 tier, name FROM nodependents UNION SELECT tier, dependentname FROM hierarchy ) SELECT @sql = @sql + ''DROP VIEW '' + name + '';'' + @crlf FROM combined GROUP BY name --need to group because of multiple dependency paths ORDER BY MAX(tier) desc PRINT @sql; --commented out until I''m confident I want to run it --EXEC(@sql)


Todas las respuestas no tienen en cuenta las restricciones entre vistas. Este script tendrá esto en cuenta:

SET @schemeName = ''dbo'' SELECT @name = (SELECT TOP 1 o.[name] FROM sysobjects o inner join sys.views v ON o.id = v.object_id WHERE SCHEMA_NAME(v.schema_id) =@schemeName AND o.[type] = ''V'' AND o.category = 0 AND o.[name] NOT IN ( SELECT referenced_entity_name FROM sys.sql_expression_dependencies AS sed INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id WHERE referenced_schema_name = @schemeName ) ORDER BY [name]) WHILE @name IS NOT NULL BEGIN SELECT @SQL = ''DROP VIEW ['' + @schemeName + ''].['' + RTRIM(@name) +'']'' EXEC (@SQL) PRINT ''Dropped View: '' + @name SELECT @name = (SELECT TOP 1 o.[name] FROM sysobjects o inner join sys.views v ON o.id = v.object_id WHERE SCHEMA_NAME(v.schema_id) = @schemeName AND o.[type] = ''V'' AND o.category = 0 AND o.[name] NOT IN ( SELECT referenced_entity_name FROM sys.sql_expression_dependencies AS sed INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id WHERE referenced_schema_name = @schemeName ) ORDER BY [name]) END GO

Esto pasa a todas las vistas y selecciona la vista TOP 1 que no está presente en el sistema de referencias.


DECLARE @sql VARCHAR(MAX) = '''' , @crlf VARCHAR(2) = CHAR(13) + CHAR(10) ; SELECT @sql = @sql + ''DROP VIEW '' + QUOTENAME(SCHEMA_NAME(schema_id)) + ''.'' + QUOTENAME(v.name) +'';'' + @crlf FROM sys.views v PRINT @sql; EXEC(@sql);


declare @SQL nvarchar(max) set @SQL = ( select ''drop view ''+name+''; '' from sys.views for xml path('''') ) exec (@SQL)