Sql server SQL Server不支持';我找不到我的功能
我使用SQL Server 2008和Borland Delphi来开发我的应用程序。最近我犯了一个很奇怪的错误。我已经创建了几个在我的应用程序中使用的标量函数,但是我遇到了一个客户的问题,在他的公司,当我调用我的标量函数时,我的软件返回以下错误: 找不到列“dbo”或用户定义函数或聚合“dbo.FunctionName”,或者名称不明确。“ 即使在这里,我已经搜索了很多,所以请记住:Sql server SQL Server不支持';我找不到我的功能,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我使用SQL Server 2008和Borland Delphi来开发我的应用程序。最近我犯了一个很奇怪的错误。我已经创建了几个在我的应用程序中使用的标量函数,但是我遇到了一个客户的问题,在他的公司,当我调用我的标量函数时,我的软件返回以下错误: 找不到列“dbo”或用户定义函数或聚合“dbo.FunctionName”,或者名称不明确。“ 即使在这里,我已经搜索了很多,所以请记住: 功能存在 我正在查询正确的数据库 没有打字错误 所有者架构是dbo 我所有的功能都会出现这个问题 最奇
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拒绝在哪里发生这种情况?谢谢你的回答。正如我在前面的评论中所说,问题在于我的数据访问组件。尽管如此,我还是非常感谢你的帮助。