错误说明:无法对表 '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。
在该数据库中,已经存在这一个索引定义。但不知怎么能够生成这个索引。我删除该索引后,重新建立相同的索引却报错。
请赐教。

解决方案 »

  1.   

    我将 WITH SCHEMABINDING 那个子句去掉,也还是要报错。
      

  2.   

    在SQL SERVER 2005 的联机丛书中明确指出:
       计算列中的所有函数引用必须与表具有相同的所有者。然而 AdventureWorks 中怎么会这个么一个索引的呢?
      

  3.   

    问题是当有那个计算列使用自定义函数时,别说删除,连 ALTER 都不行的。
    当然只要把那个函数的架构也设为 Sales,就不报错了。我弄不明白,为什么 AdventureWorks 里居然会那个索引以合法的方式存在?
    难道无人研究这个数据库,到 SQLSERVER 数据库版中提问,居然无人问津,除了坐沙发的。