首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

alert view的有关问题

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

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 '不存在'



如果不存在,看看视图……



你运行下以下sql:

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[View_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
begin
   alter VIEW [dbo].[View_1]
AS
SELECT     InstanceID, ServiceContract
FROM         dbo.ActiveConfigHosts

end
[其他解释]
2楼的试了没?
[其他解释]
引用:
2楼的试了没?


我的前提是不能删除,只能修改。因为这个视图在发布中(数据的复制定于)。
[其他解释]
因为这个视图在发布中(数据的复制订阅中)
[其他解释]
不是很明白 huangzj的意思,我已经写了

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[View_1]') and OBJECTPROPERTY(id, N'IsView') = 1) 
begin
   alter VIEW [dbo].[View_1]
AS
SELECT     InstanceID, ServiceContract
FROM         dbo.ActiveConfigHosts

end 
[其他解释]
if exists (select 1 from sys.views where name='View_1')
begin
   alter VIEW [dbo].[View_1]
AS
SELECT     InstanceID, ServiceContract
FROM         dbo.ActiveConfigHosts

end  
[其他解释]
消息 156,级别 15,状态 1,第 3 行
关键字 'VIEW' 附近有语法错误。

huangzj,你运行下你的sql,不支持这样的写法啊
[其他解释]
alter VIEW 就不能放在 begin end里面
[其他解释]
晕,我是复制你说的自己写了的那段来改的...
[其他解释]
我也给说晕了,你看你自己简单写段sql: 如果视图存在就修改(不是删除重建)。
[其他解释]
应该只能是用 exec 了

热点排行