此过程不返回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_'并将其他内容用作前缀 - 或者根本没有前缀! –
你能提供一个例子,你如何检查程序的结果 –