sql 2000创建分区视图,注意事项

分区视图出现:“不可更新,因为没有找到分区列” 问题

--原因是约束被禁用了,所以提示找不到分区列  
 
--启用这些约束就行了  
ALTER  TABLE  InOutM2004  CHECK  CONSTRAINT  ALL  
ALTER  TABLE  InOutM2003  CHECK  CONSTRAINT  ALL  
go  
 
-------------------------------------------------------------------  
--如果还是不行,可以通过强制修改系统表来实现  
 
exec  SP_CONFIGURE  'ALLOW  UPDATES',1  RECONFIGURE  WITH  OVERRIDE  
go  
 
update  sysobjects  set  status=6  
where  xtype='C'  and  parent_obj  in(object_id('InOutM2004'),object_id('InOutM2003'))  
go  
 
exec  SP_CONFIGURE  'ALLOW  UPDATES',0  RECONFIGURE  WITH  OVERRIDE  
go  
 
------------------------------------------------------------------  
 
--或者重建约束也行  
 
ALTER  TABLE  [dbo].[InOutM2003]  DROP  CONSTRAINT  [CK__InOutM200__iSubY__25DB9BFC]  
ALTER  TABLE  [dbo].[InOutM2003]  ADD  CONSTRAINT  [CK__InOutM200__iSubY__25DB9BFC]  CHECK  ([iSubYear]  =  2003)  
ALTER  TABLE  [dbo].[InOutM2004]  DROP  CONSTRAINT  [CK__InOutM200__iSubY__3AD6B8E2]  
ALTER  TABLE  [dbo].[InOutM2004]  ADD  CONSTRAINT  [CK__InOutM200__iSubY__3AD6B8E2]  CHECK  ([iSubYear]  =  2004)  
===============
分区列规则  
  分区列存在于每个成员表上,并且通过   CHECK   约束标识特定表中的可用数据。分区列必须遵守如下规则:    
   
  每个基表都拥有键值由   CHECK   约束所强制的分区列。每个表的   CHECK   约束的键范围与其它任何表互不重叠。任何分区列的给定值必须只能映射到一个表。CHECK   约束只能使用以下运算符:BETWEEN、AND、OR、<、<=、>、>=、=。  
   
   
  分区列不能是标识、默认或   timestamp   列。  
   
   
  在视图中,分区列必须位于每个   SELECT   语句的选择列表中相同的序号位置处。例如,分区列要么总是每个选择列表中的首列,要么总是每个选择列表中的第二列,依次类推。  
   
   
  分区列不允许为空。  
   
   
  分区列必须是表的主键的一部分。  
   
   
  分区列不能是计算列。  
   
   
  在分区列上必须只有一个约束。如果约束多于一个,SQL   Server   会忽略所有的约束并在确定视图是否为分区视图时不考虑这些约束。  
   
   
  分区列的可更新性没有约束。    
------------------------------
另外,   楼主的表还有如下问题:  
  1.   日期的问题,   楼主把你的语句打印出来看看,   可以发现你的约束不是你想要的.   约束值不是一个日期,   也不是一个字符  
   
  2.   楼主的表有标识列,   因此,   是不能用INSERT的,   这在联机帮助上也有说明:  
   
   
  INSERT   语句  
  INSERT   语句通过分区视图将数据添加到成员表中。INSERT   语句必须遵守下列规则:    
   
  所有列必须包含在   INSERT   语句中,即使基表中的列可能为   NULL   或在基表中定义了   DEFAULT   约束。  
   
   
  不能在   INSERT   语句的   VALUES   子句中指定   DEFAULT   关键字。  
   
   
  INSERT   语句提供的值必须符合在一个成员表的分区列上定义的   CHECK   约束逻辑。  
   
   
  如果一个成员表包含具有标识属性的列,则不能使用   INSERT   语句。  
   
   
  如果一个成员表包含   timestamp   列,则不能使用   INSERT   语句。  
   
   
  如果存在具有同一视图或任一成员表的自联接,则不能使用   INSERT   语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值