wp7*_*8de 3 sql-server clustered-index materialized-view sql-server-2016
当我尝试创建/更改视图来创建这样的索引时
\nCREATE UNIQUE CLUSTERED INDEX IDX_vSalPopulation\n ON sfdc.vSalPopulation (ID);\nRun Code Online (Sandbox Code Playgroud)\n我收到以下错误消息
\n\n\n消息 1938,级别 16,状态 1,第 40 行 无法在视图\n\'vSalPopulation\' 上创建索引,因为基础对象 \'YR_TRM_SBTRM_TABLE\'\n 具有不同的所有者。
\n
当我检查表时,我发现这些表由不同的模式拥有
\nexec sp_tables \'dbo.YR_TRM_SBTRM_TABLE\'\nexec sp_tables \'vSalPopulation\'\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\nTABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS\nMyDB dbo YR_TRM_SBTRM_TABLE TABLE NULL \nMyDB sfdc vSalPopulation VIEW NULL\n
有关索引视图的文档指出,您不能拥有引用两个不同数据库的索引视图。
\nWITH SCHEMABINDING选项创建视图。但是,我有相同的数据库,但有两个不同的架构。也许问题实际上是第三个要求?虽然我没有引用其他视图,但还是有函数的。也许我误解了错误消息。权限?那么,一般来说,是否可以有一个索引视图来引用来自两个不同模式的对象?
\n给我同样错误的视图的简化定义如下所示
\nALTER VIEW sfdc.vSalPopulation\n WITH SCHEMABINDING \nAS\nSELECT DISTINCT\n ID\nFROM dbo.CAN\nINNER JOIN dbo.YR_TRM_SBTRM_TABLE YTS ON CAN.YR_CDE = YTS.YR_CDE\nWHERE YTS.SBTRM_END_DTE > GETDATE()\nRun Code Online (Sandbox Code Playgroud)\n
我想我在这里找到了答案。基本上,将我的第二个架构的授权授予 dbo:
ALTER AUTHORIZATION ON SCHEMA::sfdc TO dbo
Run Code Online (Sandbox Code Playgroud)
因此,它确实与所有权/授权有关,而不是模式本身。请参阅: https: //www.sqlteam.com/articles/understanding-the-difference- Between-owners-and-schemas-in-sql-server
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |