2016-03-21 13 views
14

मेरे पास स्क्रिप्ट है जहां मैं पहले दृश्य छोड़ना चाहता हूं और फिर इसे बनाना चाहता हूं। मैं कैसे तालिका ड्रॉप करने जानते हैं:ड्रॉप दृश्य यदि मौजूद है

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(......) 

और उसके बाद मुझे मिल गया त्रुटि:

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

+1

इन आदेशों के बीच 'जाओ' रखें ... – Shnugo

+0

मैंने इसे बनाने से पहले रखा: जाओ बनाएं .... आदि लेकिन फिर मिला: डेटाबेस में 'टीएसबी' नामक एक ऑब्जेक्ट पहले से ही है। – 4est

+3

गलत वस्तु प्रकार - 'यू' के बजाय 'वी' का उपयोग करें। https://msdn.microsoft.com/en-us/library/ms190324.aspx –

उत्तर

42

अपने मौजूद वाक्य रचना गलत है और आप नीचे

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

create view tst 
as 
select * from test 
जैसे डीडीएल को अलग करना चाहिए

आप भी तरह

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

create view tst 
as 
select * from test 

एसक्यूएल 2016 में नीचे, आप SQL2016 CU1 से

Drop view if exists dbo.tst 

ड्रॉप करने वाक्यविन्यास नीचे का उपयोग कर सकते अस्तित्व परीक्षण जांच कर सकते हैं, object_id के साथ, आप

create or alter view vwTest 
as 
select 1 as col; 
go 
नीचे क्या कर सकते हैं
+2

काम कर रहा है धन्यवाद, यू से वी बदलें और अब काम कर रहा है! मदद के लिए धन्यवाद – 4est

+1

मामूली सुधार- ड्रॉप देखें dbo.tst अगर EXISTS को ड्रॉ व्यू पढ़ना चाहिए तो EXISTS dbo.tst – Rich

+0

@Rich: सुधार करने के लिए धन्यवाद, मैं अब – TheGameiswar

संबंधित मुद्दे