【问题标题】:View in one schema and table in another schema在一个模式中查看,在另一个模式中查看表
【发布时间】:2013-12-21 11:22:20
【问题描述】:

我有一个由 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] as select * from dbo.TableTest

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

【问题讨论】:

    标签: sql-server views database-schema access-rights


    【解决方案1】:

    如果在创建 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多