Sql server SQL Server不支持';我找不到我的功能

Sql server SQL Server不支持';我找不到我的功能,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我使用SQL Server 2008和Borland Delphi来开发我的应用程序。最近我犯了一个很奇怪的错误。我已经创建了几个在我的应用程序中使用的标量函数,但是我遇到了一个客户的问题,在他的公司,当我调用我的标量函数时,我的软件返回以下错误: 找不到列“dbo”或用户定义函数或聚合“dbo.FunctionName”,或者名称不明确。“ 即使在这里,我已经搜索了很多,所以请记住: 功能存在 我正在查询正确的数据库 没有打字错误 所有者架构是dbo 我所有的功能都会出现这个问题 最奇

我使用SQL Server 2008和Borland Delphi来开发我的应用程序。最近我犯了一个很奇怪的错误。我已经创建了几个在我的应用程序中使用的标量函数,但是我遇到了一个客户的问题,在他的公司,当我调用我的标量函数时,我的软件返回以下错误:

找不到列“dbo”或用户定义函数或聚合“dbo.FunctionName”,或者名称不明确。“

即使在这里,我已经搜索了很多,所以请记住:

  • 功能存在

  • 我正在查询正确的数据库

  • 没有打字错误

  • 所有者架构是dbo

  • 我所有的功能都会出现这个问题

    最奇怪的是

  • 只有当我从应用程序中调用它们时才会发生这种情况,如果我使用同一用户在查询分析器中运行完全相同的代码,它就会正常运行

  • 我在其他几个客户中也有相同的功能,他们没有任何问题。这可能是SQL Server的问题吗


    Ps:对不起,我的英语很差,这里的第一个问题。

    我不知道QueryAnalyzer如何调用您的函数,但我知道这个错误。
    通常,当您有用户定义的函数时,需要在函数前面加上模式名

    因此,如果您的函数位于模式“dbo”中,且名称为“fnPadLeft”,则需要用如下代码调用该函数:

    SELECT 
       id
       ,some_field
       ,dbo.fnPadLeft(some_other_field) 
    FROM YOUR_TABLE_NAME
    
    SELECT 
       id
       ,some_field
       ,fnPadLeft(some_other_field)  -- lacks dbo.
    FROM YOUR_TABLE_NAME
    
    如果你这样称呼它:

    SELECT 
       id
       ,some_field
       ,dbo.fnPadLeft(some_other_field) 
    FROM YOUR_TABLE_NAME
    
    SELECT 
       id
       ,some_field
       ,fnPadLeft(some_other_field)  -- lacks dbo.
    FROM YOUR_TABLE_NAME
    
    然后您将得到“没有这样的函数”。
    顺便说一句,这只发生在标量函数上(您特别提到了这一点),表值函数(以及所有其他非函数的东西)不受此“特性”的影响。


    也可能是两个模式中的函数名相同(还可以查看主数据库中的函数)“是表值函数。

    在同一台服务器中是否有多个数据库被访问?或者您是否尝试删除前缀dbo?我在该服务器上只有一个数据库。当我尝试调用不带“dbo”前缀的函数时,会出现以下错误:“函数名”不是可识别的内置函数名。请快速检查并确保它们没有使用区分大小写的排序规则。我对参数名也有类似的问题,尽管微软否认这可能发生。我已经证实了这一点。然而,排序规则是不区分大小写的(SQL拉丁1\u General\u CP850\u CI\u AI)。我对所有数据库都使用相同的方法。@TonyHopkinson-MS拒绝在哪里发生这种情况?谢谢你的回答。正如我在前面的评论中所说,问题在于我的数据访问组件。尽管如此,我还是非常感谢你的帮助。