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];
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?
Funciona bien para mí en SQL Server 2017:
USE MSSQLTipsDemo
GO
CREATE OR ALTER PROC CreateOrAlterDemo
AS
BEGIN
SELECT TOP 10 * FROM [dbo].[CountryInfoNew]
END
GO
https://www.mssqltips.com/sqlservertip/4640/new-create-or-alter-statement-in-
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
.
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