#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 вернет)