【问题标题】:Call a user defined function defined in schemaA from a view defined in SchemaB SQL Server从架构 SQL Server 中定义的视图调用架构中定义的用户定义函数
【发布时间】:2017-07-05 07:20:41
【问题描述】:

我在从我的角度调用函数时遇到问题。它们都在不同的模式中,所以我有这样的东西:

View [SchemaA].[ViewName]
    WITH SCHEMABINDING
    AS
        SELECT DISTINCT
             [SchemaB].[functionName](value) as 'variable'
        FROM
            //Several selects with joins

问题是我收到此错误:“无法架构绑定视图 'SchemaA.view'。'SchemaB.functionName' 未绑定架构。”

我也尝试在函数调用中包含数据库名称,如下所示:

[database].[SchemaB].[functionName]

但是还是不行。但是它返回了一个不同的错误:“无法模式绑定视图 'SchemaA.view',因为名称 'SchemaB.functionName' 对于模式绑定无效。名称必须采用两部分格式,并且对象不能引用自身。”

知道我做错了什么吗?

谢谢

【问题讨论】:

  • 试试[database.SchemaB].[functionName]
  • 返回此错误:“找不到列“database.SchemaB”或用户定义的函数或聚合“database.SchemaB.functionName”,或者名称不明确。”
  • 错误消息告诉您函数存在问题,而不是您尝试调用它的方式
  • 您是否错过了架构的所有者:[SchemaA].[dbo].[functionName]?
  • 它与函数本身有关,它还需要包含模式绑定标志。感谢您的 cmets

标签: sql sql-server database


【解决方案1】:

您的函数应该是架构绑定的 (WITH SCHEMABINDING):

CREATE FUNCTION SchemaBinded(@INPUT INT)
RETURNS INT WITH SCHEMABINDING
BEGIN
RETURN @INPUT * 2 + 50
END
GO

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多