gpt4 book ai didi

mysql - 为什么我可以使用 SCHEMABINDING 修改 View 引用的表?

转载 作者:行者123 更新时间:2023-11-29 04:01:05 24 4
gpt4 key购买 nike

寻找有关 SCHEMABINDING 的一些说明。我在一个论坛上读到,如果您使用 Schemabinding 创建 View ,则无法更改基表。

所以我使用 SCHEMABINDING 创建了一个 View ,并且能够从基表中删除一列。

所以,现在我对 SCHEMABINDING 的目的是什么以及应该在何时何地使用它感到困惑?

注意:我试图删除基表,但由于 SCHEMABINDING 而无法这样做。

最佳答案

SCHEMABINDING 不仅限于对象级绑定(bind)。在这种情况下,实际上可以只绑定(bind)到特定的列。以这个非常简单的例子为例:

CREATE TABLE dbo.foo(a INT, b INT);
GO

CREATE VIEW dbo.vFoo
WITH SCHEMABINDING
AS
SELECT a FROM dbo.foo;
GO

因为 View 只引用列 a,所以我可以删除 b 没问题:

ALTER TABLE dbo.foo DROP COLUMN b;
GO

但是当我尝试触摸 a 时,问题:

ALTER TABLE dbo.foo DROP COLUMN a;
GO

错误:

Msg 5074, Level 16, State 1, Line 17
The object 'vFoo' is dependent on column 'a'.
Msg 4922, Level 16, State 9, Line 17
ALTER TABLE DROP COLUMN a failed because one or more objects access this column.

因此,无论是谁在那个论坛上写的,他们都不是很明确或详细。 The documentation有点帮助,但您仍然需要推断:

... the base table or tables cannot be modified in a way that would affect the view definition.

请注意,句子并没有在“修改”一词之后结束。删除 View 中未引用的列不会以影响 View 定义的方式修改表,因为它不知道它未引用的列。

关于mysql - 为什么我可以使用 SCHEMABINDING 修改 View 引用的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com