索引中用到了一个用户自定义函数,都绑定到架构了,为什么创建索引时还是报错,提示:
消息 10133,级别 16,状态 1,第 1 行
无法对视图 "Brand.dbo.xxxx" 创建 索引,因为视图引用的函数 "dbo.fn_CubicVolume" 在执行用户或系统数据访问。
消息 10133,级别 16,状态 1,第 1 行
无法对视图 "Brand.dbo.xxxx" 创建 索引,因为视图引用的函数 "dbo.fn_CubicVolume" 在执行用户或系统数据访问。
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
*
from
dbo.a join dbo.b
on
a.id=b.id
go
2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
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---正确写法
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
go3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引
--正确的写法
create unique clustered index ix_uniquetb on v_tb
go--错误的写法
create clustered index ix_uniquetb on v_tb
go
小F 这个你还没改过来啊。。
一样的写法
.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
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---正确写法
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
--1、
create table tb (id varchar(10))
insert tb
select '1' union all
select '10' union all
select '40'--2、
create function dbo.f_1 (@a varchar(10))
returns int
with schemabinding
as
begin
return convert(int,@a)
end--3、
create view v_tb1 with schemabinding
as
select dbo.f_1(id) as c from dbo.tb
go--4、
create unique clustered index ix_tb1 on v_tb1(c)
returns int
with schemabinding
as
begin
return convert(int,@a)
end你这个函数中只返回一个固定值,你试一下这样:
create function dbo.f_1 (@a varchar(10))
returns int
with schemabinding
as
begin
declare @ttt varchar(111)set @ttt=''
select @ttt= 字段 from dbo.table where 字段=@a
RETURN @ttt
end
用OBJECTPROPERTY来检验也是确定性函数,怎么还是不让建