Mysql 为什么我可以修改由SCHEMABINDING视图引用的表?

Mysql 为什么我可以修改由SCHEMABINDING视图引用的表?,mysql,sql,sql-server,Mysql,Sql,Sql Server,寻找一些关于SCHEMABINDING的澄清。我在一个论坛上读到,如果使用Schemabinding创建视图,则无法更改基表 因此,我使用SCHEMABINDING创建了一个视图,并能够从基表中删除一列 所以,现在我不知道策划的目的是什么,应该在何时何地使用它 注意:我试图删除基表,但由于SCHEMABINDING而无法删除。SCHEMABINDING不仅仅限于对象级绑定。在这种情况下,实际上只能绑定到特定列。举一个非常简单的例子: CREATE TABLE dbo.foo(a INT, b I

寻找一些关于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
由于视图仅引用列
a
,因此我可以删除
b
没有问题:

ALTER TABLE dbo.foo DROP COLUMN b;
GO
但当我试图触摸
a
时,问题是:

ALTER TABLE dbo.foo DROP COLUMN a;
GO
错误:

Msg 5074,16级,状态1,第17行
对象“vFoo”依赖于列“a”。
味精4922,16级,状态9,第17行
ALTER TABLE DROP列a失败,因为一个或多个对象访问此列

所以,无论是谁写了他们在论坛上写的东西,他们都不是非常明确或详细。有点帮助,但您仍然需要推断:

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


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

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,16级,状态1,第17行
对象“vFoo”依赖于列“a”。
味精4922,16级,状态9,第17行
ALTER TABLE DROP列a失败,因为一个或多个对象访问此列

所以,无论是谁写了他们在论坛上写的东西,他们都不是非常明确或详细。有点帮助,但您仍然需要推断:

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


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

这是mysql还是SQL Server?不同的事情。哦,也许是个愚蠢的问题,但是你删除的列是否包含在视图中?哦,是的…该列不在视图中。好吧,这是你的答案,正如Aaron在下面详细解释的。这是mysql还是SQL Server?不同的事情。哦,也许是个愚蠢的问题,但你删除的专栏是否包含在视图中?哦,是的……该专栏不在视图中。好吧,这是你的答案,正如亚伦在下面详细解释的那样。