2014-12-11 4 views
1

Я сделал свою хранимую процедуру 101 недавно и просто написал небольшую хранимую процедуру, которая выглядит следующим образом:Похоже Моя хранимая процедура возвращает целое число

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[SelectProUserByUsername] 
    @userName varchar(300) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT * from ProUser 
END 

По какой-то причине, SSMS имеет основания полагать, что мой тип возврата является целым числом. Он должен в браузере объектов, чтобы моя хранимая процедура возвращала целое число Return integer

Я не уверен, в чем причина этого. Есть идеи?

+5

Возможно, кто-то может написать это как ответ со ссылками, если я прав, но я думаю, что ключ здесь состоит в том, что * процедура * на самом деле не имеет возвращаемого значения, но функция * * делает. Целое число «возвращено», по-видимому, относится к состоянию выхода, которое может установить proc. Фактический набор результатов просто всплывает как побочный эффект запуска sproc и не «возвращается» в обычном смысле программирования. – IMSoP

+0

@IMSoP: Я вижу, вы имеете в виду, что это всего лишь индикатор, указывающий, правильно ли вышла процедура или нет. Это правильное понимание? – TeaLeave

+1

Не выполняется ли процедура: это количество строк в результирующем наборе. –

ответ

4

SQL Server поддерживает как User-Defined Functions, так и Stored Procedures. В то время как функция принимает несколько параметров в качестве входных данных и возвращает одно значение пользовательского типа в качестве вывода, хранимая процедура представляет собой просто набор подключенных операторов SQL. Они могут быть подключены к остальной программе через входные и выходные параметры или они могут просто изменять данные, создавать наборы результатов и т. Д., Как если бы Transact-SQL был вставлен непосредственно в запрос.

Цитирую the Books Online article, хранимая процедура может:

  • Принимать входные параметры и возвращать несколько значений в виде выходных параметров в вызывающей программе.
  • Содержит операторы программирования, которые выполняют операции в базе данных. К ним относятся вызов других процедур.
  • Возвращает значение статуса вызывающей программе для указания успеха или отказа (и причины сбоя).

Эта последняя точка - это смысл, в котором хранимая процедура «возвращает целое число», поскольку статус возврата всегда является целочисленным значением (со значением по умолчанию 0). Это контролируется с помощью the RETURN statement внутри хранимой процедуры.

Например, если я побежал хранимую процедурный выше, как так:

DECLARE @return_status int; 
EXEC @return_status = SelectProUserByUsername 'IMSoP'; 
SELECT @return_status as status; 

Я хотел бы получить дополнительный набор результатов с status из 0; если бы я добавил RETURN 1 в конце процедуры, вместо этого я получил бы 1.

SSMS просто отображает «возвращаемый тип», чтобы он соответствовал функциям, но он всегда будет целым числом для хранимой процедуры.

Обратите внимание, что в некоторых контекстах функция целочисленного возврата и хранимая процедура могут использоваться взаимозаменяемо; например, the EXECUTE/EXEC statement в моем примере выше использует тот же синтаксис для любого «модуля» (процедура, функция и т. д.).

Смежные вопросы