寻找有关 SCHEMABINDING 的一些说明。我在一个论坛上读到,如果您使用 Schemabinding 创建视图,则无法更改基表。
因此,我使用 SCHEMABINDING 创建了一个视图,并且能够从基表中删除一列。
所以,现在我对 SCHEMABINDING 的目的是什么以及应该在何时何地使用它感到困惑?
注意:我试图删除基表,但由于 SCHEMABINDING,我无法这样做。
寻找有关 SCHEMABINDING 的一些说明。我在一个论坛上读到,如果您使用 Schemabinding 创建视图,则无法更改基表。
因此,我使用 SCHEMABINDING 创建了一个视图,并且能够从基表中删除一列。
所以,现在我对 SCHEMABINDING 的目的是什么以及应该在何时何地使用它感到困惑?
注意:我试图删除基表,但由于 SCHEMABINDING,我无法这样做。
SCHEMABINDING
不仅限于对象级绑定。在这种情况下,实际上可以只绑定到特定的列。举这个非常简单的例子:
CREATE TABLE dbo.foo(a INT, b INT);
GO
CREATE VIEW dbo.vFoo
WITH SCHEMABINDING
AS
SELECT a FROM dbo.foo;
GO
由于视图只引用 column a
,我可以放弃b
没有问题:
ALTER TABLE dbo.foo DROP COLUMN b;
GO
但是,一旦我尝试触摸a
,问题:
ALTER TABLE dbo.foo DROP COLUMN a;
GO
错误:
消息 5074,级别 16,状态 1,第 17 行
对象“vFoo”依赖于列“a”。
消息 4922,级别 16,状态 9,第 17 行
ALTER TABLE DROP COLUMN a 失败,因为一个或多个对象访问此列。
所以,无论是谁写了他们在那个论坛上写的东西,他们都不是很明确或详尽。该文档更有帮助,但您仍然需要推断:
...不能以影响视图定义的方式修改基表。
请注意,这句话没有在“修改”一词之后结束。删除视图中未引用的列不会以影响视图定义的方式修改表,因为它不知道它未引用的列。