2016-03-21 20 views
14

İlk önce görünümü bırakıp sonra da oluşturmak istediğim komut dosyası var. Masayı damla biliyorum:Varsa görünümü çıkar

yüzden görünümler için aynı şeyi
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'table1' AND type = 'U') DROP TABLE table1; 

:

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

ve sonra aldığım hata:

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

+1

bu komutlar arasında bir 'GO' yer ... – Shnugo

+0

Oluşturmadan önce şunu yazalım: Git… vb. Oluştur ancak daha sonra var: Veritabanında zaten 'TSB' adlı bir nesne var. – 4est

+3

Yanlış nesne tipi - 'U' yerine 'V' kullanın. https://msdn.microsoft.com/en-us/library/ms190324.aspx –

cevap

42

senin var sözdizimi yanlış olduğunu ve DDL'yi,

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

create view tst 
as 
select * from test 
gibi bir yere gitmeli

ayrıca, sen SQL2016 CU1 itibaren

Drop view if exists dbo.tst 

düşmesi sözdizimi aşağıda kullanabilirsiniz SQL 2016 yılında

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

create view tst 
as 
select * from test 

altında gibi object_id ile, varlığı testini kontrol edebilir,

create or alter view vwTest 
as 
select 1 as col; 
go 
altına yapabilirsiniz
+2

, U'dan V'ye değiştirin ve şimdi çalışıyor! yardım için teşekkürler – 4est

+1

Küçük düzeltme-DROP GÖRÜNÜM dbo.tst IF VARSAYILAN DAVALAR VIEW dbo.tst okur dbo.tst – Rich

+0

@Rich: Düzeltme için teşekkürler, ben şimdi – TheGameiswar