Определяемая пользователем функция в SQL не выполняется - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь выполнить этот запрос:

SELECT
    [DateAdded], [DateUpdated],
    [dbo].[firstchartoupper]([LastName]) AS [LastName],
    [FirstName], [NPI], [StreetAddress],
    [CITY], [ZIP], [STATE], [Organization],
    [ReportYearMonth], [FileUploadDate] 
FROM
    tt

[dbo].[firstchartoupper] - это моя пользовательская скалярная функция, которую я написал

CREATE FUNCTION [dbo].[firstchartoupper]
     (@name AS NVARCHAR(255))
RETURNS NVARCHAR(255)
AS
BEGIN
    DECLARE @CHAR NVARCHAR(1);
    DECLARE @rem NVARCHAR(50);
    DECLARE @output NVARCHAR(255);

    IF @name IS NULL
       RETURN NULL;

    SET @char = SUBSTRING(@name, 1, 1);
    SET @rem = SUBSTRING(@name, 2, LEN(@name));
    SET @output = @char + @rem;

    RETURN @output;
END

Однако я получаю ошибку

Не удается найти ни столбец dbo, ни пользовательскую функцию, ни совокупный скаляр

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

Судя по всему, похоже, что sql-сервер не обнаружил эту функцию. Я просто затем нажал Ctrl + F5, а затем F5 в Management Studio. Это сработало

0 голосов
/ 20 февраля 2019

Ваша функция и SQL, который ее правильно называет, написаны.

Убедитесь, что вы выполнили SQL, который создает функцию в соответствующей базе данных , и перед выполнением SELECT, который ее использует(используйте GO в качестве разделителя пакетов, если в SSMS).Вы можете использовать USE DatabaseName непосредственно перед оператором CREATE FUNCTION для переключения текущей подключенной базы данных.

Затем используйте этот запрос, чтобы найти его:

USE DatabaseName

SELECT
    ObjectType = O.type_desc,
    SchemaName = SCHEMA_NAME(O.[schema_id]),
    ObjectName = O.name,
    CreatedDate = O.create_date,
    ModifiedDate = O.modify_date
FROM
    sys.objects AS O
WHERE
    O.type IN ('FN')

Если в списке указано , а не , значит, он не был создан или вы создали его в другой базе данных.

Вы можете проверить свою функцию без какой-либо ссылки на таблицу, непосредственно указав ей значение:

SELECT dbo.firstchartoupper(N'Some testing value')

Вы также можете попробовать добавить имя базы данных перед схемой, если она находится в другой базе данных:

SELECT DatabaseName.dbo.firstchartoupper(N'Some testing value')
0 голосов
/ 20 февраля 2019

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

  select * from sys.objects where name = 'firstchartoupper' and type_desc = 'SQL_SCALAR_FUNCTION'

Если это работает нормально, попробуйте запрос с именем базы данных.как показано ниже

        SELECT
            [DateAdded], [DateUpdated],
            [yourdbname].[dbo].[firstchartoupper]([LastName]) AS [LastName],
            [FirstName], [NPI], [StreetAddress],
            [CITY], [ZIP], [STATE], [Organization],
            [ReportYearMonth], [FileUploadDate] 
        FROM
            tt

GO

0 голосов
/ 20 февраля 2019

Ваша функция на самом деле ничего не делает - но, похоже, она "работает", как в this db <> fiddle.

Это выражение, которое вы хотите?

select stuff(str, 1, 1, upper(left(str, 1)))

Это верхний регистр первого символа в строке - кажется, это то, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...