【问题标题】:Error when creating view - [dbo].[someFunction] is not schema bound创建视图时出错 - [dbo].[someFunction] 未绑定架构
【发布时间】:2011-05-07 19:08:04
【问题描述】:

创建视图时出现此错误: “无法架构绑定视图 'dbo.viewStock'。'dbo.GetStockCurrentQuantityByProduct' 未绑定架构。”

背景:我真正想要实现的是提高检索产品 ID/当前库存的查询速度。当前库存由计算特定产品的进出单位的函数('dbo.GetStockCurrentQuantityByProduct')计算得出。我正在探索一种可能的解决方案 - 创建一个索引视图来保存产品 ID 和当前库存,因此我可以直接从中选择以加快查询执行速度:

    CREATE VIEW [dbo].[viewStock] with schemabinding
    as 
    SELECT P.ProductId, 
    dbo.GetStockCurrentQuantityByProduct(P.ProductId) AS Quantity 
    FROM dbo.Product 

当我执行这个时,我得到了错误:

    Cannot schema bind view 'dbo.viewStock'. 
'dbo.GetStockCurrentQuantityByProduct' is not schema bound.

【问题讨论】:

  • 好的,我们已经根据您的标题和问题正文中的两次确定,函数 GetStockCurrentQuantityByProduct 不受架构约束。那么您需要什么帮助?
  • 编辑为“你能帮我解决这个错误吗?” :p

标签: sql-server-2008 indexed-views


【解决方案1】:

如果您在视图或函数中使用架构绑定,则所有被调用的视图或函数也必须使用架构绑定。

Schemabinding 使您不会意外更改基础表和列,如果这会破坏视图。这在您的场景中似乎很有用。

因此,解决方案是修改 GetStockCurrentQuantityByProduct,使其也使用模式绑定。

查看CREATE FUNCTIONALTER FUNCTION 的SCHEMABINDING 选项

【讨论】:

  • 这对于描述如何解决问题完全没有用。
  • @Random - OP 显然不同意您的评估,因为他们接受了答案。他们真的只是在他们不明白他们需要架构绑定他们的功能的地步。我将他们指向函数文档并告诉他们使用模式绑定。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多