对索引视图创建索引出错误,求帮忙解答问题

chaozhou 2011-12-21 05:34:04
创建了一个索引视图,视图包含两列,A1列是ntext类型,A2列是datetime类型,索引视图创建成功后,
想再A2列的索引:create unique clustered index id_v_A2 on 视图(A2);
但是老是提示下面错误:
无法对视图 '......' 创建 索引。它包含 text、ntext、image 或 xml 列

问为什么?A2列是datetime类型,不是ntext类型,怎么不行啊?是不是视图里头其它列包含ntext类型后,其它列不是ntext类型也创建不了索引啊?
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-12-21
  • 打赏
  • 举报
回复
---索引视图

索引视图是具体化的视图

--创建索引视图
create view 视图名 with schemabinding
as
select 语句
go

---创建索引视图需要注意的几点
1. 创建索引视图的时候需要指定表所属的架构
--错误写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
a join b
on
a.id=b.id
go

---正确写法:
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go


2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
create view v_f with schemabinding
as
select
*
from
dbo.a join dbo.b
on
a.id=b.id
go

---正确写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go

3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了

4. 只能为索引视图创建唯一聚集索引
--正确的写法
create unique clustered index ix_uniquetb on v_tb
go

--错误的写法
create clustered index ix_uniquetb on v_tb
go
chaozhou 2011-12-21
  • 打赏
  • 举报
回复
高手出来帮忙啊?谢谢了。

我的表列已经创建ntext类型,并且表数据记录已有几十万了,现在修改记录老是有问题啊?就是超时啊,改不了。

请高手帮个大忙,两个情况选择
(1)就是上面的视图有什么办法绕道创建索引?
(2)如果实在不能创建索引,那么我想改ntext为nvarchar类型,但是记录太多了,老是超时,有什么办法解决超时问题?谢谢了。
chaozhou 2011-12-21
  • 打赏
  • 举报
回复
create table t
(
a1 ntext;
a2 datetime
a3 varchar(50)
);创建成功
create view v with schemabinding as
(
select convert(varchar(1024),a1) as a1,a2 from dbo.t
);创建成功

create unique clustered index id_t_a2 on v(a2);失败


问有什么办法解决,谢谢了。
chaozhou 2011-12-21
  • 打赏
  • 举报
回复
试了,结果视图能创建,但是索引依然无法创建,同样错误啊。
_0筱筱0_ 2011-12-21
  • 打赏
  • 举报
回复
CONVERT(VARCHAR(50),列名)
chaozhou 2011-12-21
  • 打赏
  • 举报
回复
再问:
假如按照kuqideyupian说的不行,
那么我表是ntext行,
但是我视图substring(ntext)一部分出来行吗?
如果行,在视图里,怎样把substring(ntext)转成nvarchar啊?
谢谢指导了。
_0筱筱0_ 2011-12-21
  • 打赏
  • 举报
回复
表的聚集索引上也不能用NTEXT吧
chaozhou 2011-12-21
  • 打赏
  • 举报
回复
晕倒,那表怎么行啊?
假如我上面的视图是表,他就行啊。
_0筱筱0_ 2011-12-21
  • 打赏
  • 举报
回复
当然不行,其它列是要作为索引项存在叶子节点中的,当然不能太大

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧