vista varias una tablas parametros optimizar inner indexada crear consultas con actualizar sql-server

sql-server - varias - optimizar inner join sql server



Servidor SQL equivalente a Oracle CREAR O REEMPLAZAR VISTA (8)

A partir de SQL Server 2016 tienes

DROP TABLE IF EXISTS [foo];

Fuente MSDN

En Oracle, puedo volver a crear una vista con una sola declaración, como se muestra aquí:

CREATE OR REPLACE VIEW MY_VIEW AS SELECT SOME_FIELD FROM SOME_TABLE WHERE SOME_CONDITIONS

Como implica la sintaxis, esto eliminará la vista anterior y la volverá a crear con cualquier definición que haya dado.

¿Hay un equivalente en SQL Server 2005 que haga lo mismo?



Las soluciones anteriores, aunque harán el trabajo, lo hacen a riesgo de perder los permisos de los usuarios. Prefiero hacer mi crear o reemplazar vistas o procedimientos almacenados de la siguiente manera.

IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N''[dbo].[vw_myView]'')) EXEC sp_executesql N''CREATE VIEW [dbo].[vw_myView] AS SELECT ''''This is a code stub which will be replaced by an Alter Statement'''' as [code_stub]'' GO ALTER VIEW [dbo].[vw_myView] AS SELECT ''This is a code which should be replaced by the real code for your view'' as [real_code] GO


Normalmente uso algo como esto:

if exists (select * from dbo.sysobjects where id = object_id(N''dbo.MyView'') and OBJECTPROPERTY(id, N''IsView'') = 1) drop view dbo.MyView go create view dbo.MyView [...]


Para referencia de SQL Server 2016 SP1+ puede usar la sintaxis CREATE OR ALTER VIEW .

MSDN CREATE VIEW :

CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ]

O ALTER

Condicionalmente altera la vista solo si ya existe.


Puede usar ''IF EXISTS'' para verificar si la vista existe y soltar si lo hace.

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = ''MyView'') DROP VIEW MyView GO CREATE VIEW MyView AS .... GO


Puede usar ALTER para actualizar una vista, pero esto es diferente al comando de Oracle, ya que solo funciona si la vista ya existe. Probablemente esté mejor con la respuesta de DaveK ya que eso siempre funcionará.


Yo suelo:

IF OBJECT_ID(''[dbo].[myView]'') IS NOT NULL DROP VIEW [dbo].[myView] GO CREATE VIEW [dbo].[myView] AS

...

Recientemente agregué algunos procedimientos de utilidad para este tipo de cosas:

CREATE PROCEDURE dbo.DropView @ASchema VARCHAR(100), @AView VARCHAR(100) AS BEGIN DECLARE @sql VARCHAR(1000); IF OBJECT_ID(''['' + @ASchema + ''].['' + @AView + '']'') IS NOT NULL BEGIN SET @sql = ''DROP VIEW '' + ''['' + @ASchema + ''].['' + @AView + ''] ''; EXEC(@sql); END END

Entonces ahora escribo

EXEC dbo.DropView ''mySchema'', ''myView'' GO CREATE View myView ... GO

Creo que hace que mis changecripts sean un poco más legibles