标量值函数从不同的DB调用

时间:2015-04-14 12:17:42

标签: sql-server function

我在DB1中有标量值函数;

功能Udf_NumberToInfo(Number)
返回:所需号码的信息

我在DB1中有表格;

第1栏:数字
第2栏:信息

我在DB2中有数字,并希望在DB2中查询它们并将它们分组。让我用示例查询来解释;

USE DB2
select DB1..dbo.Udf_NumberToInfo(Number) as INFO,COUNT(*) as count from NumberTable (nolock)
where Numbers like '5%'
group by DB1..dbo.Udf_NumberToInfo(Number)

查询返回:

Remote function reference 'DB1..dbo.Udf_NumberToInfo' is not allowed, and the column name 'DB1' could not be found or is ambiguous.

如何在DB1中使用远程标量值函数?

感谢。

2 个答案:

答案 0 :(得分:1)

它应该工作,因为你使用db1..dbo它应该是db1.dbo 我在我的本地机器上测试过它。 看看这个

USE DB2
select DB1.dbo.Udf_NumberToInfo(Number) as INFO,COUNT(*) as count from 
NumberTable (nolock)
where Numbers like '5%'
group by DB1.dbo.Udf_NumberToInfo(Number)

答案 1 :(得分:0)

SQL Server中的双点表示法意味着:使用当前用户默认架构(或默认数据库)。

使用DBName..myFunction表示:myFunction数据库中用户的默认架构中的DBName功能。默认情况下,默认架构是dbo,但可以更改。

让我们假设userA具有cust架构作为其默认架构,而userB默认具有dbo架构。在这种情况下,当userA执行DBName..myFunction函数时,它将指向DBName.cust.myFunction,但当userB执行它时,它将指向DBName.dbo.myFunction

在您的情况下,DB1..dbo.Udf_NumberToInfo表示:在用户的默认数据库和名为dbo的模式中,在名为DB1的链接服务器上使用Udf_NuberToInfo函数。

假设DB1和DB2托管在同一台服务器上,您应该使用DB1.dbo.Udf_NumberToInfo

有关标识符的详细信息,请阅读MSDN上的以下文章:https://technet.microsoft.com/en-us/library/ms187879(v=sql.105).aspx