由于发布的视图不能删除,要判断视图是否存在,然后修改。而不是存在就删除,然后再新建!
发现不能实现如果存在 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 ....')
------其他解决方案--------------------
对。只能这样做了。
否则只能是删除再创建。
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
------其他解决方案--------------------
没说你删除啊,你把你那段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
------其他解决方案--------------------
不能删除再重建的原因是:这个视图在发布中(数据同步发布订阅),只能更新。我现在要判断是否存在,存在就修改,不能判断删除。
------其他解决方案--------------------