是否可以确定Sybase ASE(v15.7)中的现有视图是否具有WITH CHECK OPTION
子句?除了该子句之外,我创建了两个相同的视图,并且所有系统表中的条目(例如sysobjects
,syscomments
,sysprotects
等)对于两个视图看起来都是相同的。 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
答案 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)) ...