此過程不返回2,它總是返回1.如何在插入發生時返回1,並在發生更新時返回2? 這是完全插入和更新,但返回的值始終爲1如何在SQL Server 2008的單個存儲過程中插入並返回2後返回1
CREATE PROCEDURE [dbo].[sp_SaveEmployeeDetails]
@employeeID int
,@first_name varchar(255)
,@middle_name varchar(255)
,@last_name varchar(255)
,@gender varchar(255)
,@date_of_birth date
,@EntryBy varchar(255)
--,@ActionStatus int = NULL OUTPUT
AS
BEGIN
SET NOCOUNT OFF;
DECLARE @ActionStatus int;
IF NOT EXISTS(Select * From employees
Where employeeID [email protected])
BEGIN
INSERT INTO [dbo].[employees] ([first_name], [middle_name], [last_name], [gender], [date_of_birth], [EntryBy], [EntryDate])
VALUES (@first_name, @middle_name, @last_name, @gender, @date_of_birth, @EntryBy, getdate())
SET @ActionStatus = 1;
END
ELSE
BEGIN
UPDATE employees
SET [first_name] = @first_name,
[middle_name] = @middle_name,
[last_name] = @last_name,
[gender] = @gender,
[date_of_birth] = @date_of_birth,
[EntryBy] = @EntryBy,
[EntryDate] = getdate()
WHERE
employeeID = @employeeID
SET @ActionStatus = 2;
END
RETURN @ActionStatus;
--also try SELECT @ActionStatus;
END
當我寫了我的答案,問題是有點不同......你怎麼稱呼這個?你如何檢索返回值?你確定,ELSE部分已經到達嗎?員工是否更新以防員工存在?還有一個提示。你可能會想到'MERGE'語句。 – Shnugo
備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –
你能提供一個例子,你如何檢查程序的結果 –