Как запустить пользовательскую процедуру в sql?

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть функция SQL Server, которую мне нужно выполнить. Но я попытался вызвать его через select, exec — он выдает ошибку. Как исправить эту ошибку и запустить эту функцию?

Код процедуры

 create or alter function mergetext
    (@TitleOfCourtesy text, 
     @FirstName text, 
     @LastName text)
returns varchar(255)
as
begin
    return concat(@TitleOfCourtesy, ' ', @FirstName, ' ', @LastName)
end

select mergetext('a','b','c')
  

Сообщение об ошибке

Сообщение 156, уровень 15, состояние 1, Текст слияния процедур, строка 12 [Строка запуска пакета 0]
Неправильный синтаксис возле ключевого слова ‘select’.

Сообщение 195, уровень 15, состояние 10, процедура mergetext, строка 12 [Строка запуска пакета 0]
‘mergetext’ не является распознанным именем встроенной функции.

Комментарии:

1. Добавить GO после определения процедуры. Или запускать их как отдельные пакеты. Вы действительно хотите добавить три text значения, чтобы сформировать varchar(255) хотя.

2. ntext и text типы данных будут удалены в будущей версии SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте изменять приложения, которые в настоящее время их используют. nvarchar(max) varchar(max) Вместо этого используйте или. Смотрите подробности здесь

Ответ №1:

При вызове функции SQL Server необходимо включить схему. Если вы не указали схему при создании функции, то функция создается с использованием вашей схемы по умолчанию (возможно, dbo). Итак, попробуйте вызвать функцию так: SELECT dbo.mergetext('a','b','c')

Ответ №2:

Прежде всего, это не процедура. Это функция. Во-вторых, тип text устарел и не должен использоваться. Затем вам нужно отделить создание объекта либо с помощью GO , выполнив его в отдельном окне запроса, либо выбрав только функцию и нажав F5.

Попробуйте это:

 create or alter function mergetext(
    @TitleOfCourtesy text, 
    @FirstName text, 
    @LastName text
)
returns varchar(255)
as
begin
    return concat(@TitleOfCourtesy,' ',@FirstName,' ',@LastName)
end

GO

select dbo.mergetext('a','b','c')
  

и, наконец, почему вы создаете оболочку CONCAT функции. Просто используйте CONCAT везде, где вам нужно.

Комментарии:

1. Нет, это не сработает. Этот код выдает сообщение 195, уровень 15, состояние 10, текст слияния процедур, строка 12 [Строка запуска пакета 0] ‘mergetext’ не является распознанным именем встроенной функции. ошибка

2. @who_am_i Просто укажите схему следующим образом select dbo.mergetext('a','b','c')