2016-03-21 18 views
14

Ho uno script in cui voglio prima visualizzare la vista e poi crearla. So come far cadere tavolo:Eliminare la visualizzazione se esistente

IF EXISTS (SELECT * FROM sys.tables WHERE name = 'table1' AND type = 'U') DROP TABLE table1; 

così ho fatto lo stesso per le viste:

IF EXISTS (SELECT * FROM sys.views WHERE name = 'view1' AND type = 'U') DROP VIEW view1; 
create view1 as(......) 

e di errore poi ho avuto:

'CREATE VIEW' must be the first statement in a query batch.

+1

posizionare un 'GO' tra questi comandi ... – Shnugo

+0

L'ho messo prima di creare: Vai Crea .... ecc. Ma poi ottenuto: C'è già un oggetto chiamato 'TSB' nel database. – 4est

+3

Tipo di oggetto errato: utilizzare "V" anziché "U". https://msdn.microsoft.com/en-us/library/ms190324.aspx –

risposta

42

tua esiste sintassi è sbagliato e si dovrebbe separare DDL con andare come sotto

if exists(select 1 from sys.views where name='tst' and type='v') 
drop view tst; 
go 

create view tst 
as 
select * from test 

È inoltre possibile controllare prova di esistenza, con object_id come qui di seguito

if object_id('tst','v') is not null 
drop view tst; 
go 

create view tst 
as 
select * from test 

In SQL 2016, è possibile utilizzare sotto la sintassi di cadere

Drop view if exists dbo.tst 

Da SQL2016 CU1, si può fare sotto

create or alter view vwTest 
as 
select 1 as col; 
go 
+2

grazie, modifica da U a V e ora funziona! grazie per l'aiuto – 4est

+1

Correzione minore- DROP VIEW dbo.tst SE ESISTE dovrebbe leggere DROP VIEW IF EXISTS dbo.tst – Rich

+0

@Rich: Grazie per la correzione, aggiornerò ora – TheGameiswar