Подтвердить что ты не робот

<table-valued function> не является признанным встроенным именем функции

Я получаю эту ошибку:

Msg 195, уровень 15, состояние 10, строка 1
'fnParseName' не является признанным встроенным именем функции.

По этому запросу:

SELECT  fnParseName(DOCTORFIRSTNAME+' ' +DOCTORLASTNAME) 
  FROM [PracticeandPhysician]

Здесь код для fnParseName

create FUNCTION [dbo].[fnParseName]
               (@FullName NVARCHAR(128))
RETURNS @FullNameParts TABLE  (FirstName  NVARCHAR(128),
                               Middle     NVARCHAR(128),
                               LastName   NVARCHAR(128))
AS
  BEGIN
    ... function body that populates @FullNameParts ...
    RETURN
  END

Почему я получаю эту ошибку?

4b9b3361

Ответ 1

Это табличная функция. Поэтому вы, вероятно, имели в виду:

SELECT p.DOCTORFISTNAME, p.DOCTORLASTNAME, t.FirstName, t.Middle, t.LastName
  FROM dbo.[PracticeandPhysician] AS p
  CROSS APPLY dbo.fnParseName(p.DOCTORFIRSTNAME + ' ' + p.DOCTORLASTNAME);

Заметьте, что вы не можете сказать:

SELECT dbo.TableValueFunction('foo');

Больше, чем вы могли бы сказать:

SELECT dbo.Table;
--or
SELECT dbo.View;

Вы можете, однако, сказать:

SELECT * FROM dbo.fnParseName('foo bar');
--or
SELECT FirstName, Middle, LastName FROM dbo.fnParseName('foo bar');

(Не то, чтобы я подтвердил, что ваша функция делает то, что вы думаете, или делает это эффективно.)

Пожалуйста, всегда используйте префикс dbo., как предлагали другие.

Ответ 2

Вам всегда нужно префиксные вызовы функций SQL с именем схемы dbo. или именем схемы для этой функции (dbo - это схема по умолчанию).

SELECT dbo.fnParseName(--etc

Ответ 3

UDFs/Функции должны иметь префикс имени схемы (скорее всего, "dbo" ). Измените вызов на

SELECT
    dbo.fnParseName(DOCTORFIRSTNAME + ' ' + DOCTORLASTNAME) 
FROM
    [PracticeandPhysician]

Ответ 4

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

 Create function udfCountry
 (
@CountryName varchar(50)
 )
 returns varchar(2)
 as 
 BEGIN
 Declare @CountryID varchar(2),
    @Result varchar(2)

 Select @CountryID = Country from 
dbo.GeoIPCountryNames where CountryName = @CountryName

set @Result = isNull(@CountryID, 'NA')
if @Result = 'NA'
set @Result = 'SD'
return @Result
End

//Реализация

select dbo.[udfCountry]('Nigeria')

//образец результата

NG

//Пример функции встроенной таблицы

 Create FUNCTION  ConditionEvaluation
 (
  @CountrySearch varchar(50)
 )
 returns @CountryTable table 
(
Country varchar(2),
CountryName varchar(50)
 )
 as 

 Begin

 Insert into @CountryTable(Country, CountryName)
 Select Country, CountryName from GeoIPCountryNames
 where Country like '%'[email protected]+'%'
 return 
 end

//Пример реализации

 Declare @CountrySearch varchar(50)
 set @CountrySearch='a'
 select * from  ConditionEvaluation(@CountrySearch)

Parttern реализации скаляра - совершенно другая встроенная таблица. Надеюсь, это поможет

Ответ 5

Если вы хотите присвоить значение, возвращаемое tfn, в переменной хранимой процедуры, вы можете сделать это следующим образом:

select  @my_local_variable_in_procedure = column_name_returned_from_tfn from dbo.my_inline_tfn (@tfn_parameter)