53

CREATE OR REPLACE VIEWSQL Server では動作しないようです。CREATE OR REPLACE VIEWでは、SQL Server で動作するように移植するにはどうすればよいでしょうか?

これは私がやろうとしていることです:

CREATE OR REPLACE VIEW data_VVVV AS 
SELECT 
    VCV.xxxx,
        VCV.yyyy AS yyyy,
        VCV.zzzz AS zzzz
FROM 
TABLE_A
;

何か案は?

4

8 に答える 8

84

@Khanの回答から借りて、私は次のようにします:

IF OBJECT_ID('dbo.test_abc_def', 'V') IS NOT NULL
    DROP VIEW dbo.test_abc_def
GO

CREATE VIEW dbo.test_abc_def AS
SELECT 
    VCV.xxxx
    ,VCV.yyyy AS yyyy
    ,VCV.zzzz AS zzzz
FROM TABLE_A

MSDN リファレンス

于 2014-10-10T23:05:57.850 に答える
42

SQL Server 2016 の回答

SQL Server 2016 では、次のことができるようになりました ( MSDN Source ):

DROP VIEW IF EXISTS dbo.MyView

または代わりに ( MSDN ソース):

CREATE OR ALTER VIEW dbo.MyView
于 2016-02-17T10:30:35.413 に答える
9

受け入れられた解決策には、同じステートメントを 2 回維持する必要があるという問題があり、あまり効率的ではありません (機能しますが)。理論的には、ビューの作成はバッチの最初の行でなければならないため、MSSQL では機能しないことを除いて、Gordon Linoff のソリューションは有効です。

ドロップ/作成は、提起された質問に答えません。以下は、元の質問に従って仕事をします。

if not exists (select * from sysobjects where name='TABLE_A' and xtype='V')
exec ('create view SELECT 
VCV.xxxx,
    VCV.yyyy AS yyyy,
    VCV.zzzz AS zzzz
FROM TABLE_A')
于 2016-01-31T22:13:26.630 に答える
3

このようなものはどうですか、コメントは説明する必要があります:

--DJ - 2015-07-15 Example for view CREATE or REPLACE

--Replace with schema and view names
DECLARE @viewName NVARCHAR(30)= 'T';
DECLARE @schemaName NVARCHAR(30)= 'dbo';

--Leave this section as-is
BEGIN TRY
    DECLARE @view AS NVARCHAR(100) = '
CREATE VIEW ' + @schemaName + '.' + @viewName + ' AS SELECT '''' AS [1]';
    EXEC sp_executesql
        @view;
END TRY
BEGIN CATCH
    PRINT 'View already exists';
END CATCH;
GO

--Put full select statement here after modifying the view & schema name appropriately
ALTER VIEW [dbo].[T]
AS
    SELECT  '' AS [2];
GO


--Verify results with select statement against the view
SELECT  *
FROM    [T];

乾杯 -DJ

于 2015-07-15T08:23:45.500 に答える
0

ビューを変更するには、ビューを削除して再作成します。以下を使用して、ビューをドロップして再作成します。

IF EXISTS
(SELECT NAME FROM SYS.VIEWS WHERE NAME = 'dbo.test_abc_def')
DROP VIEW dbo.test_abc_def) go

CREATE VIEW dbo.test_abc_def AS
SELECT 
    VCV.xxxx, 
    VCV.yyyy AS yyyy
    ,VCV.zzzz AS zzzz
FROM TABLE_A
于 2016-05-15T06:21:46.570 に答える