Oracleでは、次に示すように、単一のステートメントでビューを再作成できます。
CREATE OR REPLACE VIEW MY_VIEW AS
SELECT SOME_FIELD
FROM SOME_TABLE
WHERE SOME_CONDITIONS
構文が示すように、これにより古いビューが削除され、指定した定義でビューが再作成されます。
同じことを行う同等のMSSQL(SQL Server 2005以降)はありますか?
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
参考として、構文を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
私の変更スクリプトがもう少し読みやすくなると思います
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-
SQL Server 2016(またはそれ以降)では、これを使用できます。
CREATE OR ALTER VIEW VW_NAMEOFVIEW AS ...
古いバージョンのSQLサーバーでは、次のようなものを使用する必要があります
DECLARE @script NVARCHAR(MAX) = N'VIEW [dbo].[VW_NAMEOFVIEW] AS ...';
IF NOT EXISTS(SELECT * FROM sys.views WHERE name = 'VW_NAMEOFVIEW')
-- IF OBJECT_ID('[dbo].[VW_NAMEOFVIEW]') IS NOT NULL
BEGIN EXEC('CREATE ' + @script) END
ELSE
BEGIN EXEC('ALTER ' + @script) END
または、ビューに依存関係がない場合は、ビューを削除して再作成するだけです。
IF EXISTS(SELECT * FROM sys.views WHERE name = 'VW_NAMEOFVIEW')
-- IF OBJECT_ID('[dbo].[VW_NAMEOFVIEW]') IS NOT NULL
BEGIN
DROP VIEW [VW_NAMEOFVIEW];
END
CREATE VIEW [VW_NAMEOFVIEW] AS ...
CREATE OR REPLACE VIEWますが、構文を使用できません。正しい構文はCREATE OR ALTER VIEWです。どのようにeverybdody状態それがあることを、来るCREATE OR REPLACE🤔私が見つける他のすべてのSOのスレッドで