我有一个由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]
如果我创建这样的视图:
创建视图[测试]。[ViewTest]作为select * from dbo.TableTest
当我对新创建的视图进行选择时,我从Test.TableTest获取结果,而不是按预期从dbo.TableTest获取结果。 发生了什么事?
答案 0 :(得分: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应该包括source,cost和partnumber列 - 但是如果我们执行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