日期:2014-05-17  浏览次数:20451 次

alert view的问题
由于发布的视图不能删除,要判断视图是否存在,然后修改。而不是存在就删除,然后再新建!

发现不能实现如果存在 if exists 视图, 然后 alter view。请问怎样解决呢?

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[v_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
   alter view v_1
    
上面的语句不能执行。
------最佳解决方案--------------------
alter/create是不能直接放在if/else里面执行滴,必须启用exec大法

if (object_id('dbo.view_name') is not null)
exec ('alter view dbo.view_name ...')
else
exec ('create view dbo.view_name ....')

------其他解决方案--------------------
引用:
alter/create是不能直接放在if/else里面执行滴,必须启用exec大法


Plain Text code??



12345

if (object_id('dbo.view_name') is not null)     exec ('alter view dbo.view_name ...') else     exec ('create view dbo.……

对。只能这样做了。

否则只能是删除再创建。
if exists(select * from dbo.sysobjects where id = object_id('View_1') and type='v')
drop view view_1
go
create view view_1
as
select 1 as a
go

------其他解决方案--------------------
引用:
引用:
2楼的试了没?

我的前提是不能删除,只能修改。因为这个视图在发布中(数据的复制定于)。
没说你删除啊,你把你那段if的改成这个视图嘛
------其他解决方案--------------------
楼主先试试下面语句,看看输出什么?

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[v_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
PRINT '存在'
else
PRINT '不存在'


如果不存在,看看视图有没有(是否是数据库弄错了)
如果存在,你试试用 begin end 把你整个更新视图的语句包起来
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[v_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
begin
    整个更新的视图语句
end
------其他解决方案--------------------
你不需要alter啊,直接删除重建,视图又不包含数据,和存储过程那样,直接删除
------其他解决方案--------------------
如果是2008 的话,可以使用:
SELECT * FROM sys.views WHERE name='xxxx'来查询是否存在视图。
------其他解决方案--------------------
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[v_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
GO------
   alter view v_1

------其他解决方案--------------------



引用:
你不需要alter啊,直接删除重建,视图又不包含数据,和存储过程那样,直接删除


不能删除再重建的原因是:这个视图在发布中(数据同步发布订阅),只能更新。我现在要判断是否存在,存在就修改,不能判断删除。
------其他解决方案--------------------
引用:
楼主先试试下面语句,看看输出什么?
SQL code??1234if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[v_1]') and OBJECTPROPERTY(id, N'IsView') = 1) PRINT '存在'elsePRINT '不存在'