我使用带有Borland Delphi的SQL Server 2008来开发我的应用程序。从最近我发现了一个非常奇怪的错误。我创建了几个我在我的应用程序中使用的标量函数,但我遇到了客户的问题,在他的公司中,当我调用标量函数时,我的软件会返回以下错误:
找不到列“dbo”或用户定义的函数或聚合“dbo.FunctionName”,或者名称不明确。“
我已经搜索了很多,甚至在这里,所以请记住:
dbo
; 所有我的功能都会出现此问题;
最奇怪......
只有当我从我的应用程序中调用它们时才会发生,如果我使用同一个用户在查询分析器上运行完全相同的代码,它将运行得很好。
我在其他几个客户中拥有相同的功能,他们没有任何问题。可能是SQL Server问题吗?
Ps:对不起我的英语不好,这里的第一个问题。
答案 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数据库中的函数)。也许你的“其他函数”是表值函数。