SQL Server找不到我的功能

时间:2013-06-29 11:57:35

标签: sql-server sql-server-2008

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

  

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

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

  1. 功能存在;
  2. 我正在查询正确的数据库;
  3. 没有拼写错误;
  4. 所有者架构为dbo;
  5. 所有我的功能都会出现此问题;

    最奇怪......

  6. 只有当我从我的应用程序中调用它们时才会发生,如果我使用同一个用户在查询分析器上运行完全相同的代码,它将运行得很好。

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

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

1 个答案:

答案 0 :(得分:0)

我不知道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

然后你会得到“没有这样的功能” 这只发生在标量函数btw上。 (你特别提到这一点),表值函数(和所有其他非函数的东西)不受这个“特征”的影响。

也可能是您在两个模式中具有相同的函数名(也可以查看master数据库中的函数)。也许你的“其他函数”是表值函数。

相关问题