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
구문을 사용할 수 있습니다 .
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ]
또는 변경
뷰가 이미있는 경우에만 조건부로 변경합니다.
답변
나는 사용한다:
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 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-