如何判断是否在Sybase ASE中使用CHECK OPTION创建了视图

时间:2015-03-10 15:50:12

标签: sql sybase sybase-ase

是否可以确定Sybase ASE(v15.7)中的现有视图是否具有WITH CHECK OPTION子句?除了该子句之外,我创建了两个相同的视图,并且所有系统表中的条目(例如sysobjectssyscommentssysprotects等)对于两个视图看起来都是相同的。 exec sp_helptext没有显示该条款。

在MSSQL中,sys.views有一个with_check_option列,但似乎没有ASE的等价物。

在下面的示例中,WITH CHECK OPTION子句完全按预期工作,即check_test_2插入失败,除非visible设置为Y。有没有办法确定哪个视图设置了WITH CHECK OPTION子句?

示例代码:

use tempdb
go

if object_id('check_test') is not null drop table check_test
go
create table check_test (id int, visible char(1))
go

if object_id('check_test_1') is not null drop view check_test_1
go
create view check_test_1
as
select *
from check_test
where visible = 'Y'
go

if object_id('check_test_2') is not null drop view check_test_2
go
create view check_test_2
as
select *
from check_test
where visible = 'Y'
with check option
go

1 个答案:

答案 0 :(得分:0)

看起来这是Sybase ASE中从12.5到16.0的错误,但可能会在某些服务包中发布(16.0 SP01,15.7 SP134 - 尚未确认)。

http://scn.sap.com/thread/3713912

解决方案是设置一些开关(200 =优化前打印树,3604 =打印输出到客户端),然后从视图中设置select,并在输出中搜索CHECKOPT,以便问题的例子:

use tempdb
go
set switch on 200
set switch on 3604
set noexec on
go
select *
from check_test_2
go

(相当大)输出中的某处将是:

... root2stat:(0x10000000 (BCP_LABELS, CHECKOPT)) ...