OVH Cloud OVH Cloud

Création de vue avec test existence avant

7 réponses
Avatar
Yan
Bonjour,

Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier sinon.

J'ai pensé à faire comme ça par exemple :

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
ALTER VIEW ViewTOTO AS SELECT ...
else
CREATE VIEW ViewTOTO AS SELECT ...

Mais apparamment, seul DROP est autorisé après le test if, sauf pour les
tables.

Alors y a-t-il un autre moyen de faire ?

Merci d'avance

Yan

7 réponses

Avatar
Philippe T [MS]
Bonjour,

if exists (select * from dbo.sysobjects where id object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
BEGIN
ALTER VIEW ViewTOTO AS SELECT ...
END
else
BEGIN
CREATE VIEW ViewTOTO AS SELECT ...
END

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41c98d40$0$12848$
Bonjour,

Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier sinon.

J'ai pensé à faire comme ça par exemple :

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
ALTER VIEW ViewTOTO AS SELECT ...
else
CREATE VIEW ViewTOTO AS SELECT ...

Mais apparamment, seul DROP est autorisé après le test if, sauf pour les
tables.

Alors y a-t-il un autre moyen de faire ?

Merci d'avance

Yan




Avatar
Yan
Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF




"Philippe T [MS]" a écrit dans le message de
news:
Bonjour,

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
BEGIN
ALTER VIEW ViewTOTO AS SELECT ...
END
else
BEGIN
CREATE VIEW ViewTOTO AS SELECT ...
END

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41c98d40$0$12848$
> Bonjour,
>
> Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier


sinon.
>
> J'ai pensé à faire comme ça par exemple :
>
> if exists (select * from dbo.sysobjects where id > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
> ALTER VIEW ViewTOTO AS SELECT ...
> else
> CREATE VIEW ViewTOTO AS SELECT ...
>
> Mais apparamment, seul DROP est autorisé après le test if, sauf pour les
> tables.
>
> Alors y a-t-il un autre moyen de faire ?
>
> Merci d'avance
>
> Yan
>
>




Avatar
Philippe T [MS]
Bonjour,

Alors, créer une chaine de caractère @SQL = N'ALTER VIEW ViewTOTO AS SELECT
...'

et utiliserun EXEC sp_executesql @SQL...

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41cac9fe$0$30803$
Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF




"Philippe T [MS]" a écrit dans le message


de
news:
> Bonjour,
>
> if exists (select * from dbo.sysobjects where id > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
> BEGIN
> ALTER VIEW ViewTOTO AS SELECT ...
> END
> else
> BEGIN
> CREATE VIEW ViewTOTO AS SELECT ...
> END
>
> Phil.
> ________________________________________________________
> Philippe TROTIN http://blogs.msdn.com/ptrotin
> Microsoft Services France http://www.microsoft.com/france
>
> "Yan" wrote in message
> news:41c98d40$0$12848$
> > Bonjour,
> >
> > Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier
sinon.
> >
> > J'ai pensé à faire comme ça par exemple :
> >
> > if exists (select * from dbo.sysobjects where id > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
> > ALTER VIEW ViewTOTO AS SELECT ...
> > else
> > CREATE VIEW ViewTOTO AS SELECT ...
> >
> > Mais apparamment, seul DROP est autorisé après le test if, sauf pour


les
> > tables.
> >
> > Alors y a-t-il un autre moyen de faire ?
> >
> > Merci d'avance
> >
> > Yan
> >
> >
>
>




Avatar
Oliv'
Salut,
Pour ne supprimes tu pas ta vue pour la recréer !?
comme cela :
-- ============================================ -- Create view basic template
-- ============================================ IF EXISTS (SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = N'view_test')
DROP VIEW view_test
GO

CREATE VIEW view_test
AS
SELECT * FROM region
GO
Oliv'

"Yan" a écrit dans le message de news:
41cac9fe$0$30803$
Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF




"Philippe T [MS]" a écrit dans le message de
news:
Bonjour,

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
BEGIN
ALTER VIEW ViewTOTO AS SELECT ...
END
else
BEGIN
CREATE VIEW ViewTOTO AS SELECT ...
END

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41c98d40$0$12848$
> Bonjour,
>
> Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier


sinon.
>
> J'ai pensé à faire comme ça par exemple :
>
> if exists (select * from dbo.sysobjects where id > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
> ALTER VIEW ViewTOTO AS SELECT ...
> else
> CREATE VIEW ViewTOTO AS SELECT ...
>
> Mais apparamment, seul DROP est autorisé après le test if, sauf pour les
> tables.
>
> Alors y a-t-il un autre moyen de faire ?
>
> Merci d'avance
>
> Yan
>
>




Avatar
Yan
Ca c'est une bonne idée !
J'ai essayé, ça marche bien

Merci




"Philippe T [MS]" a écrit dans le message de
news:
Bonjour,

Alors, créer une chaine de caractère @SQL = N'ALTER VIEW ViewTOTO AS


SELECT
...'

et utiliserun EXEC sp_executesql @SQL...

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41cac9fe$0$30803$
> Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF
>
>
>
>
> "Philippe T [MS]" a écrit dans le message
de
> news:
> > Bonjour,
> >
> > if exists (select * from dbo.sysobjects where id > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') = 1)
> > BEGIN
> > ALTER VIEW ViewTOTO AS SELECT ...
> > END
> > else
> > BEGIN
> > CREATE VIEW ViewTOTO AS SELECT ...
> > END
> >
> > Phil.
> > ________________________________________________________
> > Philippe TROTIN http://blogs.msdn.com/ptrotin
> > Microsoft Services France http://www.microsoft.com/france
> >
> > "Yan" wrote in message
> > news:41c98d40$0$12848$
> > > Bonjour,
> > >
> > > Je souhaite créer une vue si elle n'existe pas déjà, ou la modifier
> sinon.
> > >
> > > J'ai pensé à faire comme ça par exemple :
> > >
> > > if exists (select * from dbo.sysobjects where id > > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') 1)
> > > ALTER VIEW ViewTOTO AS SELECT ...
> > > else
> > > CREATE VIEW ViewTOTO AS SELECT ...
> > >
> > > Mais apparamment, seul DROP est autorisé après le test if, sauf pour
les
> > > tables.
> > >
> > > Alors y a-t-il un autre moyen de faire ?
> > >
> > > Merci d'avance
> > >
> > > Yan
> > >
> > >
> >
> >
>
>




Avatar
Philippe T [MS]
Bonjour,

Pas de quoi.

Joyeux Noel.

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41caf715$0$7929$
Ca c'est une bonne idée !
J'ai essayé, ça marche bien

Merci




"Philippe T [MS]" a écrit dans le message


de
news:
> Bonjour,
>
> Alors, créer une chaine de caractère @SQL = N'ALTER VIEW ViewTOTO AS
SELECT
> ...'
>
> et utiliserun EXEC sp_executesql @SQL...
>
> Phil.
> ________________________________________________________
> Philippe TROTIN http://blogs.msdn.com/ptrotin
> Microsoft Services France http://www.microsoft.com/france
>
> "Yan" wrote in message
> news:41cac9fe$0$30803$
> > Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF
> >
> >
> >
> >
> > "Philippe T [MS]" a écrit dans le


message
> de
> > news:
> > > Bonjour,
> > >
> > > if exists (select * from dbo.sysobjects where id > > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') 1)
> > > BEGIN
> > > ALTER VIEW ViewTOTO AS SELECT ...
> > > END
> > > else
> > > BEGIN
> > > CREATE VIEW ViewTOTO AS SELECT ...
> > > END
> > >
> > > Phil.
> > > ________________________________________________________
> > > Philippe TROTIN


http://blogs.msdn.com/ptrotin
> > > Microsoft Services France http://www.microsoft.com/france
> > >
> > > "Yan" wrote in message
> > > news:41c98d40$0$12848$
> > > > Bonjour,
> > > >
> > > > Je souhaite créer une vue si elle n'existe pas déjà, ou la


modifier
> > sinon.
> > > >
> > > > J'ai pensé à faire comme ça par exemple :
> > > >
> > > > if exists (select * from dbo.sysobjects where id > > > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') > 1)
> > > > ALTER VIEW ViewTOTO AS SELECT ...
> > > > else
> > > > CREATE VIEW ViewTOTO AS SELECT ...
> > > >
> > > > Mais apparamment, seul DROP est autorisé après le test if, sauf


pour
> les
> > > > tables.
> > > >
> > > > Alors y a-t-il un autre moyen de faire ?
> > > >
> > > > Merci d'avance
> > > >
> > > > Yan
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Yan
Merci, de même



"Philippe T [MS]" a écrit dans le message de
news:
Bonjour,

Pas de quoi.

Joyeux Noel.

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Yan" wrote in message
news:41caf715$0$7929$
> Ca c'est une bonne idée !
> J'ai essayé, ça marche bien
>
> Merci
>
>
>
>
> "Philippe T [MS]" a écrit dans le message
de
> news:
> > Bonjour,
> >
> > Alors, créer une chaine de caractère @SQL = N'ALTER VIEW ViewTOTO AS
> SELECT
> > ...'
> >
> > et utiliserun EXEC sp_executesql @SQL...
> >
> > Phil.
> > ________________________________________________________
> > Philippe TROTIN http://blogs.msdn.com/ptrotin
> > Microsoft Services France http://www.microsoft.com/france
> >
> > "Yan" wrote in message
> > news:41cac9fe$0$30803$
> > > Nan nan, ALTER ou CREATE VIEW ne sont pas possible après les test IF
> > >
> > >
> > >
> > >
> > > "Philippe T [MS]" a écrit dans le
message
> > de
> > > news:
> > > > Bonjour,
> > > >
> > > > if exists (select * from dbo.sysobjects where id > > > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView') > 1)
> > > > BEGIN
> > > > ALTER VIEW ViewTOTO AS SELECT ...
> > > > END
> > > > else
> > > > BEGIN
> > > > CREATE VIEW ViewTOTO AS SELECT ...
> > > > END
> > > >
> > > > Phil.
> > > > ________________________________________________________
> > > > Philippe TROTIN
http://blogs.msdn.com/ptrotin
> > > > Microsoft Services France


http://www.microsoft.com/france
> > > >
> > > > "Yan" wrote in message
> > > > news:41c98d40$0$12848$
> > > > > Bonjour,
> > > > >
> > > > > Je souhaite créer une vue si elle n'existe pas déjà, ou la
modifier
> > > sinon.
> > > > >
> > > > > J'ai pensé à faire comme ça par exemple :
> > > > >
> > > > > if exists (select * from dbo.sysobjects where id > > > > > > object_id(N'[dbo].[ViewTOTO]') and OBJECTPROPERTY(id, N'IsView')


> > 1)
> > > > > ALTER VIEW ViewTOTO AS SELECT ...
> > > > > else
> > > > > CREATE VIEW ViewTOTO AS SELECT ...
> > > > >
> > > > > Mais apparamment, seul DROP est autorisé après le test if, sauf
pour
> > les
> > > > > tables.
> > > > >
> > > > > Alors y a-t-il un autre moyen de faire ?
> > > > >
> > > > > Merci d'avance
> > > > >
> > > > > Yan
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>