2015-11-24 26 views
0

以下T-SQL代码旨在读取ID并检查ID是否存在于Table_1中。如果它存在,则UDF Getname3返回一个由该特定ID的所有列组成的表,如果它不存在,我想调用一个名为m的函数来打印错误。但是当我想在Getname3中调用m UDF时会出现问题。我怎样才能正确调用Getname3中的m。调用函数中的函数在SQL Server中

谢谢

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') 
+0

这里有一点性能问题。你已经创建了一个表值函数,但它是一个多语句表值函数。这通常比标量函数慢,但你甚至在这里有一个。 –

+2

您不应该从一个选择中获得不同的结果集。我会处理应用程序层中数据的存在或不存在。 – ewahner

回答

0

无法执行有效的SQL语句之外的标量函数。尝试:

SELECT dbo.m() 
+0

这也需要插入到表变量中,否则函数的结果将不会成为行。 –