CREATE OR REPLACE VIEW
ne semble pas fonctionner dans SQL Server. Alors, comment puis-je porter CREATE OR REPLACE VIEW
pour travailler sur SQL Server?
C'est ce que j'essaie de faire:
CREATE OR REPLACE VIEW data_VVVV AS
SELECT
VCV.xxxx,
VCV.yyyy AS yyyy,
VCV.zzzz AS zzzz
FROM
TABLE_A
;
Des idées?
Edit: Bien que cette question a été marquée comme un doublon, il a toujours attiré l'attention. La réponse fournie par @JaKXz est correcte et devrait être la réponse acceptée.
Vous devrez vérifier l'existence de la vue. Ensuite, faites un CREATE VIEW
ou ALTER VIEW
en fonction du résultat.
IF OBJECT_ID('dbo.data_VVVV') IS NULL
BEGIN
CREATE VIEW dbo.data_VVVV
AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV
END
ELSE
ALTER VIEW dbo.data_VVVV
AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV
BEGIN
END
Empruntant à la réponse de @ Khan, je ferais:
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
Voici une autre méthode, dans laquelle vous n'avez pas à dupliquer le contenu de la vue:
IF (NOT EXISTS (SELECT 1 FROM sys.views WHERE name = 'data_VVV'))
BEGIN
EXECUTE('CREATE VIEW data_VVVV as SELECT 1 as t');
END;
GO
ALTER VIEW data_VVVV AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A ;
La première vérifie l'existence de la vue (il existe d'autres moyens de le faire). S'il n'existe pas, créez-le avec quelque chose de simple et idiot. Si c'est le cas, passez simplement à l'instruction alter view
.
Avec SQL Server 2016, vous pouvez maintenant faire ( MSDN Source ):
DROP VIEW IF EXISTS dbo.MyView
La solution acceptée pose un problème avec la nécessité de conserver deux fois la même déclaration, elle n’est pas très efficace (bien que cela fonctionne). En théorie, la solution de Gordon Linoff serait la solution idéale, sauf que cela ne fonctionne pas dans MSSQL car la vue create doit être la première ligne d'un lot.
Le drop/create ne répond pas à la question telle que posée. Ce qui suit fait le travail selon la question initiale.
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')
Que diriez-vous de quelque chose comme ça, les commentaires devraient expliquer:
--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];
Cheers - DJ
Pour modifier une vue, vous pouvez la supprimer et la recréer. Utilisez ce qui suit pour supprimer et recréer votre vue.
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