Почему я не могу позвонить в UDF напрямую? Почему мне нужно квалифицировать его на 3 уровня?

Я только что создал UDF и проверил его, я нашел, работает только при использовании этого синтаксиса

SELECT [PMIS].[dbo].[fnIsReportingTo] (50,1132)

Я ожидал, что он будет работать следующим образом:

select * from fnIsReportingTo (50,1132)

или

select fnIsReportingTo (50,1132)

вот мой create SQL:

create function fnIsReportingTo
(
@BossID int,
@EmployeeID int)
RETURNs bit
AS
begin
declare @ret bit
    if exists (select * from dbo.fnGetEmployeeHierarchy(@BossID) where [email protected])
        select @ret=1
    else
        select @ret=0
return @ret
end
7 голосов | спросил kacalapy 14 FebruaryEurope/MoscowbMon, 14 Feb 2011 23:31:58 +0300000000pmMon, 14 Feb 2011 23:31:58 +030011 2011, 23:31:58

1 ответ


8

Скаляр UDFS должен быть квалифицирован с помощью схемы. Вам не нужна часть базы данных квалифицированного имени, если она не находится в другой базе данных, конечно.

SELECT [dbo].[fnIsReportingTo] (50,1132)

В предложении FROM вы можете использовать только функции table value

См. «Типы функций» в MSDN

Редактирование: в качестве наблюдения я бы избегал:

  • вложенные UDFs это
  • с использованием поиска таблиц в скалярных UDF

, если вы используете эту функцию для каждой строки другой таблицы, у вас есть курсор, который выполняет итерацию по таблице в UDF для каждой внешней строки

Даже это лучше. Теперь он оценивается таблицей и расширяется как вид.

create function fnIsReportingTo (
    @BossID int,
    @EmployeeID int)
RETURNs table
AS
return (
      select CAST(COUNT(*) AS bit) AS FooBar
      from dbo.fnGetEmployeeHierarchy(@BossID)
     where [email protected])
GO
ответил gbn 14 FebruaryEurope/MoscowbMon, 14 Feb 2011 23:40:40 +0300000000pmMon, 14 Feb 2011 23:40:40 +030011 2011, 23:40:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132