在 SQL Server 中的函数内调用函数

Posted

技术标签:

【中文标题】在 SQL Server 中的函数内调用函数【英文标题】:Calling a function within a function In SQL Server 【发布时间】:2015-11-24 19:11:17 【问题描述】:

下面的 T-SQL 代码用于读取 ID 并检查 ID 是否存在于 Table_1 中。如果存在,UDF Getname3 返回一个包含该特定 ID 的所有列的表,如果它不存在,我想调用一个名为 m 的函数,该函数旨在打印错误。但是当我想在 Getname3 中调用 m UDF 时,就会出现问题。如何正确调用 Getname3 中的 m。

谢谢

Create function m()
returns nvarchar(max)
as
begin
    return cast('Error happened here.' as int);
end
go

Create Function Getname3(@ID nchar(10))
returns @t Table (Melicode nchar(10), Name nvarchar(50), Id nchar(10), Tel nvarchar(max))
AS
Begin
   if (exists (select * from Table_1 where Melicode = @ID))
   begin
      insert @t
         select *  
         from Table_1 
         where Melicode = @ID
   end
   else
   begin
        dbo.m() // PROBLEM Here
   end

   return
end
go

select *
from dbo.Getname3('0410339127')

【问题讨论】:

这里有一点性能问题。您创建了一个表值函数,但它是一个多语句表值函数。这通常比标量函数还要慢,但您甚至可以在其中找到一个。 你不应该从一个选择中得到不同的结果集。我会处理您的应用层中数据的存在或不存在。 【参考方案1】:

您不能在有效 SQL 语句之外执行标量函数。试试:

SELECT dbo.m()

【讨论】:

这也需要插入到表变量中,否则函数的结果将是没有行。

以上是关于在 SQL Server 中的函数内调用函数的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 函数向存储过程抛出异常

sql server 中的自定义函数应该如何调用?

在 PL/SQL 中的触发器内调用函数

我可以在没有 [dbo] 的情况下调用 SQL Server 2005 中的函数吗?

从 VB Access 调用 UDF(Sql server)“表达式中的未定义函数 <函数名>”

python中的装饰器