Хранимая процедура возвращает varchar(МАКС.)

#sql #stored-procedures #return-value

#sql #хранимые процедуры #возвращаемое значение

Вопрос:

Мне нужна помощь, чтобы вернуть ‘xmlstring’ (varchar (MAX)) из хранимой процедуры. Это работает нормально, если я проверяю, чтобы подсчитать количество ‘xmlstring’, но как мне получить фактическую строку, возвращенную insted?

ALTER PROCEDURE dbo.sp_test
AS
DECLARE @Ret int
SELECT @Ret = COUNT(xmlstring) FROM database WHERE (id = 1)
RETURN @Ret

Я не хочу делать что-то подобное, но это неправильно:

ALTER PROCEDURE dbo.sp_test
AS
DECLARE @Ret varchar(MAX)
SELECT @Ret = TOP (1) xmlstring FROM database WHERE (id = 1)
RETURN @Ret

Ответ №1:

Да , что — то в этом роде:

 ALTER PROCEDURE dbo.sp_test AS
DECLARE @Ret varchar(MAX)
SELECT  TOP (1) xmlstring FROM database WHERE (id = 1)
 

Вам не нужен возврат, если только это не функция

Будет возвращен оператор select, и вы можете указать более одного, это набор результатов вызова

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

1. Я хочу использовать его как функцию (если это возможно).

2. Так что уберите слово процедура и поставьте вместо него функцию:

3. Если я использую ‘ExecuteScalar()’, я получаю первую ячейку в первой строке, и это работает так же, как при использовании RETURN. (Как я мог пропустить это? Проблема решена!)

Ответ №2:

 SELECT TOP (1) xmlstring FROM database WHERE (id = 1)
 

Если вы хотите установить локальную скалярную переменную такой, какой вы являетесь в данный момент, она должна быть

 ALTER PROCEDURE dbo.sp_test AS
DECLARE @Ret varchar(MAX)
Set @Ret = TOP (1) xmlstring FROM database WHERE (id = 1)
RETURN @Ret
 

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

1. Я получаю сообщение об ошибке: «Неправильный синтаксис рядом с ключевым словом «TOP»». с моим кодом выше и с вашим изменением на «Set» вместо «SELECT».

Ответ №3:

Только это:

 ALTER PROCEDURE dbo.sp_test AS
SELECT xmlstring FROM database WHERE (id = 1)
 

Вам не нужна переменная, и вам не нужен TOP , если id не является уникальным (в этом случае вы можете рассмотреть что-то помимо TOP , например, MIN() , MAX() или некоторые другие критерии фильтрации, поскольку вы не можете предсказать, какая запись TOP вернет)