0

我有一个由 db_owner 创建的表

CREATE TABLE [dbo].[TableTest](
[ID] [int] NULL,
[Cost] [int] NULL,
[partnumber] [int] NULL
) ON [PRIMARY]

另一个具有相同定义但在另一个自定义模式中的表。

CREATE TABLE [Test].[TableTest](
[source] [int] NULL,
[cost] [int] NULL,
[partnumber] [int] NULL
) ON [PRIMARY]

如果我像这样创建一个视图:

创建视图 [Test].[ViewTest] 作为 select * from dbo.TableTest

当我对新创建的视图进行选择时,我从 Test.TableTest 中获得结果,而不是从 dbo.TableTest 中获得预期的结果。怎么了?

4

1 回答 1

0

如果在创建后Test.MyView更改了基表的结构,则可能会发生这种情况(例如:添加/删除列/删除并重新创建其他列[dbo].[TableTest])。你必须使用sp_refreshview.

CREATE TABLE [dbo].[TableTest](
[ID] [int] NULL,
[Cost] [int] NULL,
[partnumber] [int] NULL
) ON [PRIMARY]
GO

CREATE SCHEMA Test
GO

CREATE TABLE [Test].[TableTest](
[source] [int] NULL,
[cost] [int] NULL,
[partnumber] [int] NULL
) ON [PRIMARY]
GO

CREATE VIEW [Test].[ViewTest] as select * from dbo.TableTest
GO

SELECT * FROM [Test].[ViewTest] 
/*
ID          Cost        partnumber
----------- ----------- -----------

(0 row(s) affected)
*/
GO

DROP TABLE [dbo].[TableTest];
GO
CREATE TABLE [dbo].[TableTest](
[source] [int] NULL,
[cost] [int] NULL,
[partnumber] [int] NULL
) ON [PRIMARY]
GO

-- 从现在开始,Test.ViewTest 应该包括源、成本和零件编号列 -- 但是如果我们执行 SELECT * FROM [Test].[ViewTest] SQL Server 将显示相同的“旧”列

SELECT * FROM [Test].[ViewTest] 
/*
ID          Cost        partnumber
----------- ----------- -----------

(0 row(s) affected)
*/
GO

-- 解决方案:sp_refreshview

EXEC sp_refreshview 'Test.ViewTest'
GO
SELECT * FROM [Test].[ViewTest] 
/*
source      cost        partnumber
----------- ----------- -----------

(0 row(s) affected)
*/
GO
于 2013-12-04T19:57:55.357 回答