В общем, есть три способа сделать это ... Вы можете сделать то, что вы делаете - с эффектом Select - возвращая одну строку, один столбец результатов и позволяя ADO.Net извлекать значение для вы. Или
вы можете использовать оператор return для возврата значения (этот подход узурпирует шаблон общего использования для возвращаемых значений возврата кода ошибки) или
вы можете использовать так называемый параметр OutPut (фактически передавая хранимому процессу ссылку на параметр, который он (процесс) может заполнить значением, которое затем будет доступно вызывающему коду ADO.net после процедуры возвращается ...
у каждого есть свои преимущества и недостатки ... Мне нравится первый вариант, потому что его проще и проще кодировать ... (это не самый лучший вариант)
пример использования выходного параметра в хранимых процессах ...
Create Procedure MyProc
@Name varchar(20),
@DOB DateTime,
@EmployeeId Integer Output = Null
As
Set NoCount On
If @EmployeeId Is Null
Begin
Insert Employees(Name, DateofBirth)
Values (@Name, @DOB)
Set @EmployeeId = Scope_Identity()
End
Else If Exists(Select * From Employees
Where EmployeeId =@EmployeeId)
Begin
Update Employees Set
Name = Isnull(@Name, Name),
DateOfBirth = IsNull(@DOB, DateOfBirth)
Where EmployeeId = @EmployeeId
End
Else
Raiserror('EmployeeId %d is missing or has been deleted.',
16, 1, @EmployeeId)
Return 0
Когда вы вызываете сохраненный процесс из ADO.Net и добавляете этот параметр в коллекцию параметров ... возникает перегрузка, которая принимает параметр метода, который является перечислением, называемым ParameterDirection, который может принимать значения ParameterDirection.InputOutput или ParameterDirection Выход, (среди прочих)