Flower@12 Ответов: 2

Как вернуть два выходных значения из хранимой процедуры SQL


Я хочу получить два выходных значения одновременно из хранимой процедуры sql .Я использую visual studio 2005 и sql server 2005.В моем сохраненном proceudre не было никаких проблем, он возвращает два значения.

@EmpSid   @RevisionNo 
     79  	2          


Что я уже пробовал:

Мой код здесь
MySID = objCmd.Parameters.AddWithValue("@EmpSid", 0)
     RevisionNo = objCmd.Parameters.AddWithValue("@RevisionNo", 1)
     objCmd.Parameters.Item("@EmpSid").Direction = ParameterDirection.Output
     objCmd.Parameters.Item("@RevisionNo").Direction = ParameterDirection.Output
objCmd.ExecuteNonQuery()


Процедура Sql
ELSE IF @Mode='EDIT'  
BEGIN  
 Select @RevisionNo = RevisionNo+1 from tblEmployeeMaster  where SID=@EmpSid 

UPDATE tblEmployeeMaster set CompanySID=@CompanySID, EmpCode=@Empcode,HonorficsSID=@HonorficsSID,EmpName=@EmpName,  
 Dob=@Dob, MaritalStatusSID=@MaritalStatusSID, GenderSID=@GenderSID, BloodGroup=@BloodGroup,  
 DateOfJoin=@DateOfJoin,EmpPhoto=@EmpPhoto ,Notes=@Notes,RevisionNo=@RevisionNo, CreatedBy=@CreatedBy, CreatedOn=GETDATE(),
 EditedBy=@CreatedBy,EditedOn=GETDATE() WHERE SID=@SID  
   SET @EmpSid=@SID
END  



Он показывает ошибку
Cannot insert the value NULL into column 'RevisionNo', table 'JSolutionHR.dbo.tblEmployeeMaster'; column does not allow nulls. UPDATE fails.
The statement has been terminated.

jaket-cp

Глядя на сообщение об ошибке - другими словами, оно говорит о попытке вставить null в
JSolutionHR.dbo.tblEmployeeMaster.Ревизионно

Проверьте, чтобы увидеть, что вы получаете за
Select @RevisionNo = RevisionNo+1 from tblEmployeeMaster where SID=@EmpSid

Предполагая, что он добирается до этой части запроса

2 Ответов

Рейтинг:
15

ZurdoDev

Как уже упоминалось в комментариях, @RevisionNo равен нулю. Ошибка не имеет ничего общего с несколькими выходными параметрами. Ошибка должна быть довольно ясной. Вы пытаетесь поместить null в столбец, который не принимает null.


Рейтинг:
1

Richard Deeming

Select ... from tblEmployeeMaster where SID = @EmpSid
UPDATE tblEmployeeMaster ... WHERE SID = @SID
SET @EmpSid = @SID

Это первое WHERE пункт должен быть использован @SID, нет @EmpSid:
SELECT @RevisionNo = RevisionNo + 1 FROM tblEmployeeMaster WHERE SID = @SID