2015-11-24 3 views
0

Код ниже T-SQL предназначен для чтения идентификатора и проверки наличия идентификатора в таблице_1 или нет. если он существует, UDF Getname3 возвращает таблицу, состоящую из всех столбцов этого идентификатора, если она не существует, я хочу вызвать функцию m, предназначенную для печати ошибки. Но проблема возникает, когда я хочу вызвать m UDF в Getname3. Как я могу правильно вызвать m в Getname3.Вызов функции внутри функции В 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

Это также необходимо вставить в переменную таблицы, иначе результат функции не будет содержать строк. –

Смежные вопросы