2016-03-21 15 views
14

Ich habe Skript, wo ich zuerst Ansicht anzeigen und dann erstellen möchten. Ich weiß, wie Tisch fallen zu lassen:Drop-Ansicht, wenn vorhanden

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

so habe ich das gleiche für Ansichten:

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

und dann bekam ich Fehler:

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

+1

platzieren Sie ein 'GO' zwischen diesen Befehlen ... – Shnugo

+0

Ich lege es vor create: Go Create .... etc, aber dann bekam: Es ist bereits ein Objekt namens 'TSB' in der Datenbank. – 4est

+3

Falscher Objekttyp - Verwenden Sie "V" anstelle von "U". https://msdn.microsoft.com/en-us/library/ms190324.aspx –

Antwort

42

Ihre existiert Syntax ist falsch, und Sie sollte trennen DDL mit gehen wie unter

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

create view tst 
as 
select * from test 

Sie können auch Existenztest überprüfen, mit object_id wie unten

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

create view tst 
as 
select * from test 

In SQL 2016 Sie unter Syntax verwenden können

Drop view if exists dbo.tst 

Von SQL2016 CU1, können Sie unter

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

danke, ändern Sie U zu V und jetzt funktioniert! Danke für die Hilfe – 4est

+1

Geringfügige Korrektur- DROP VIEW dbo.tst WENN EXISTEN sollte DROP VIEW IF EXISTS lesen dbo.tst – Rich

+0

@Rich: Danke für die Korrektur, ich werde jetzt – TheGameiswar