5

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

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

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

  1. 函数存在;

  2. 我正在查询正确的数据库;

  3. 没有错别字;

  4. 所有者架构是dbo

  5. 我的所有功能都会出现此问题;

    还有最奇怪的...

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

我在其他几个客户中也有同样的功能,他们没有任何问题。会不会是 SQL Server 的问题?

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

4

1 回答 1

3

I don't know how QueryAnalyzer calls your functions, but I know this error.
Usually, when you have user-defined functions, you need to prefix the function with the schema name.

So if your function is in schema "dbo", and the name is "fnPadLeft", you need to call the function in code like this:

SELECT 
   id
   ,some_field
   ,dbo.fnPadLeft(some_other_field) 
FROM YOUR_TABLE_NAME

If you call it like this:

SELECT 
   id
   ,some_field
   ,fnPadLeft(some_other_field)  -- lacks dbo.
FROM YOUR_TABLE_NAME

Then you'll get "no such function".
This only happens to scalar functions btw. (you specifically mentioned this), table-valued functions (and all other non-function things) are not affected by this "feature".

It might also be that you have the same functionname in two schemas (also take a look at the functions in the master database). Maybe your "other functions" are table valued functions.

于 2013-06-29T15:29:42.617 回答