【发布时间】:2019-06-10 17:01:32
【问题描述】:
我有一个表,其中包含 PERSISTED 和基于函数 (MyFunctionTest) 的结果的索引计算字段 (Test),例如:
CREATE TABLE [dbo].[TestTable] (
[Id] [int] IDENTITY(1,1) NOT NULL,
[Foo] [int] NOT NULL,
[Test] AS ([dbo].[MyFunctionTest]([Foo])) PERSISTED,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
MyFunctionTest 是:
ALTER FUNCTION [dbo].[MyFunctionTest]
(
@foo int
)
RETURNS int
WITH SCHEMABINDING
AS
BEGIN
RETURN @foo * 2
END
如果我尝试更改函数,SQL 服务器会显示错误
无法 ALTER 'dbo.MyFunctionTest' 它被对象 'TestTable' 引用。
更改函数的唯一方法似乎是创建一个新函数并更改表。
我也试过删除WITH SCHEMABINDING
【问题讨论】:
-
不是一个真正的问题,更多的是咆哮。这些是规则 - 由于依赖关系,您无法更改功能。
标签: sql sql-server tsql sql-server-2005