当我尝试创建/更改视图以创建这样的索引时
CREATE UNIQUE CLUSTERED INDEX IDX_vSalPopulation
ON sfdc.vSalPopulation (ID);
我收到以下错误消息
消息 1938,级别 16,状态 1,第 40 行索引无法在视图“vSalPopulation”上创建,因为基础对象“YR_TRM_SBTRM_TABLE”具有不同的所有者。
当我检查表时,我发现这些表属于不同的模式
exec sp_tables 'dbo.YR_TRM_SBTRM_TABLE'
exec sp_tables 'vSalPopulation'
TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS MyDB dbo YR_TRM_SBTRM_TABLE TABLE NULL MyDB sfdc vSalPopulation VIEW NULL
索引视图的文档指出,您不能拥有引用两个不同数据库的索引视图。
- 必须使用该
WITH SCHEMABINDING
选项创建视图。 - 视图必须仅引用与视图位于同一数据库中的基表。
- 该视图不能引用其他视图。… ETC
但是,我有相同的数据库,但有两个不同的模式。也许问题实际上是第三个要求?虽然我没有参考其他观点,但有一些功能。也许我误解了错误信息。权限?那么,一般来说,是否有可能有一个索引视图来引用来自两个不同模式的对象?
给我同样错误的视图的简化定义如下所示
ALTER VIEW sfdc.vSalPopulation
WITH SCHEMABINDING
AS
SELECT DISTINCT
ID
FROM dbo.CAN
INNER JOIN dbo.YR_TRM_SBTRM_TABLE YTS ON CAN.YR_CDE = YTS.YR_CDE
WHERE YTS.SBTRM_END_DTE > GETDATE()
我想我在这里找到了答案。基本上,将我的第二个模式的授权授予 dbo:
因此,它确实与所有权/授权有关,而不是模式本身。请参阅:https ://www.sqlteam.com/articles/understanding-the-difference-between-owners-and-schemas-in-sql-server