SQL Server找不到我的功能

art*_*tie 5 sql-server sql-server-2008

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

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

即使在这里,我也已经搜索了很多东西,因此请记住:

  1. 该功能存在;
  2. 我正在查询正确的数据库;
  3. 没有错别字;
  4. 所有者模式为dbo;
  5. 我的所有功能都会出现此问题;

    还有最奇怪的

  6. 仅当我从应用程序中调用它们时,如果我使用相同的用户在查询分析器上运行完全相同的代码,它就会很好地运行。

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

附言:对不起,我的英语不好,这是第一个问题。

Ste*_*ger 3

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

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

SELECT 
   id
   ,some_field
   ,dbo.fnPadLeft(some_other_field) 
FROM YOUR_TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

如果你这样称呼它:

SELECT 
   id
   ,some_field
   ,fnPadLeft(some_other_field)  -- lacks dbo.
FROM YOUR_TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

然后你会得到“没有这样的功能”。
顺便说一句,这只发生在标量函数上。(您特别提到了这一点),表值函数(以及所有其他非函数事物)不受此“功能”的影响。

也可能是两个模式中有相同的函数名(另请查看主数据库中的函数)。也许您的“其他函数”是表值函数。