创建索引失败,不知如何处理。

AhBian 2007-08-23 09:33:28
错误说明:

无法对表 'Customer' 的计算列 'AccountNumber' 创建索引,因为基础对象 'ufnLeadingZeros' 的所有者不同。


自定义标量函数 ufnLeadingZeros 的定义如下:

ALTER FUNCTION [dbo].[ufnLeadingZeros](
@Value int
)
RETURNS varchar(8)
WITH SCHEMABINDING
AS
BEGIN
DECLARE @ReturnValue varchar(8);

SET @ReturnValue = CONVERT(varchar(8), @Value);
SET @ReturnValue = REPLICATE('0', 8 - DATALENGTH(@ReturnValue)) + @ReturnValue;

RETURN (@ReturnValue);
END;

表 'Customer'的架构为 Sales。
表 'Customer' 的计算列 'AccountNumber' 的公式如下:
(isnull('AW'+[dbo].[ufnLeadingZeros]([CustomerID]),''))

以上信息来自于 SQL SERVER 2005 示例数据库 AdventureWorks。
在该数据库中,已经存在这一个索引定义。但不知怎么能够生成这个索引。

我删除该索引后,重新建立相同的索引却报错。
请赐教。
...全文
343 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓风残月0110 2007-10-04
  • 打赏
  • 举报
回复
关注~
AhBian 2007-08-23
  • 打赏
  • 举报
回复
在SQL SERVER 2005 的联机丛书中明确指出:
计算列中的所有函数引用必须与表具有相同的所有者。

然而 AdventureWorks 中怎么会这个么一个索引的呢?
comszsoft 2007-08-23
  • 打赏
  • 举报
回复
mark
AhBian 2007-08-23
  • 打赏
  • 举报
回复
我将 WITH SCHEMABINDING 那个子句去掉,也还是要报错。
AhBian 2007-08-23
  • 打赏
  • 举报
回复
问题是当有那个计算列使用自定义函数时,别说删除,连 ALTER 都不行的。
当然只要把那个函数的架构也设为 Sales,就不报错了。

我弄不明白,为什么 AdventureWorks 里居然会那个索引以合法的方式存在?
难道无人研究这个数据库,到 SQLSERVER 数据库版中提问,居然无人问津,除了坐沙发的。
kelph 2007-08-23
  • 打赏
  • 举报
回复
先把函数导出,删除后再建,建完索引再重建函数
yuedeem 2007-08-23
  • 打赏
  • 举报
回复
关注,帮顶

34,593

社区成员

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

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