これは、作成後にベース テーブルの構造を変更した場合に発生する可能性があり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