2015-11-24 46 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

這也需要插入到表變量中,否則函數的結果將不會成爲行。 –