寻找有关SCHEMABINDING的一些说明。我在一个论坛中读到,如果使用Schemabinding创建视图,则无法更改基表。
所以我使用SCHEMABINDING创建了一个视图,并且能够从基表中删除一列。
所以,现在我对SCHEMABINDING的目的是什么以及何时何地应该使用感到困惑?
注意:我试图删除基表,因为SCHEMABINDING而无法这样做。
答案 0 :(得分:6)
SCHEMABINDING
不仅限于对象级绑定。在这种情况下,实际上只能绑定到特定列。拿这个非常简单的例子来说:
CREATE TABLE dbo.foo(a INT, b INT);
GO
CREATE VIEW dbo.vFoo
WITH SCHEMABINDING
AS
SELECT a FROM dbo.foo;
GO
由于视图仅引用了列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
对象'vFoo'依赖于列'a'。
消息4922,第16级,第9行,第17行
ALTER TABLE DROP COLUMN失败,因为一个或多个对象访问此列。
所以,无论谁写了他们在那个论坛上写的东西,他们都不是非常明确或精心制作。 The documentation稍微有点帮助,但您仍需要推断:
...不能以影响视图定义的方式修改基表。
请注意,在“修改”一词后,句子不会结束。删除未在视图中引用的列不会以影响视图定义的方式修改表,因为它不知道它不引用的列。