[sql-server] Oracle의 CREATE OR REPLACE VIEW에 해당하는 SQL Server

Oracle에서는 다음과 같이 단일 문으로 뷰를 다시 만들 수 있습니다.

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

구문에서 알 수 있듯이 이것은 이전 뷰를 삭제하고 내가 지정한 정의로 다시 생성합니다.

동일한 작업을 수행하는 MSSQL (SQL Server 2005 이상)에 동등한 기능이 있습니까?



답변

위의 솔루션은 작업을 완료하지만 사용자 권한이 떨어질 위험이 있습니다. 다음과 같이 뷰 또는 저장 프로 시저를 만들거나 바꾸는 것을 선호합니다.

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


답변

‘IF EXISTS’를 사용하여 뷰가 존재하는지 확인하고 있다면 삭제할 수 있습니다.

존재하는 경우 (INFO_SCHEMA.VIEWS에서 TABLE_NAME 선택
        WHERE TABLE_NAME = 'MyView')
    드롭 뷰 MyView
가다

보기 MyView 만들기
같이
     ....
가다


답변

참조를 SQL Server 2016 SP1+위해 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 ]
[ ; ]

또는 변경

뷰가 이미있는 경우에만 조건부로 변경합니다.

db <> 바이올린 데모


답변

나는 사용한다:

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

최근에 이런 종류의 유틸리티 절차를 추가했습니다.

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

그래서 지금은

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

내 변경 스크립트를 좀 더 읽기 쉽게 만든다고 생각합니다.


답변

나는 일반적으로 다음과 같은 것을 사용합니다.

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 [...]


답변

SQL Server 2016부터

DROP TABLE IF EXISTS [foo];

MSDN 소스


답변

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-