1

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

因此,我使用 SCHEMABINDING 创建了一个视图,并且能够从基表中删除一列。

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

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

4

1 回答 1

7

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 失败,因为一个或多个对象访问此列。

所以,无论是谁写了他们在那个论坛上写的东西,他们都不是很明确或详尽。该文档更有帮助,但您仍然需要推断:

...不能以影响视图定义的方式修改基表。

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

于 2013-10-24T21:15:20.950 回答