#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')