0
我有這個存儲過程:如何在存儲過程中插入失敗時使存儲過程返回非零值?
CREATE PROCEDURE sp_purchase_test
@AdminTestId int,
@PurchaseDate DATETIME,
@UserId int
AS
INSERT INTO dbo.UserTest
(
AdminTestId,
PurchaseDate,
UserId,
Sequence
)
SELECT AdminTestId,
@PurchaseDate,
@UserId,
1
FROM AdminTest
WHERE AdminTestId = @AdminTestId
RETURN 0
我有UserTest.AdminTestId唯一索引順序,從而有可能該存儲 程序將無法正常工作。如果插入失敗,如何使存儲過程返回非零值?
根據我的理解,使用TRY-CATCH可能是一個好主意。但是,如果我這樣做我應該做的是這樣的:
BEGIN CATCH
SELECT -1
END CATCH
或
BEGIN CATCH
RETURN 99
END CATCH
我是一個SELECT之間迷茫,在存儲過程的結束和使用或返回
這裏是如何我稱之爲存儲過程。理想情況下,我希望能夠從我的C#方法返回錯誤消息。
var sql = @"dbo.sp_purchase_test @AdminTestId,
@PurchaseDate,
@UserId";
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@AdminTestId", adminTestId),
new SqlParameter("@PurchaseDate", DateTime.UtcNow),
new SqlParameter("@UserId", Int32.Parse(User.Identity.GetUserId()))
};
var result = db.Database.ExecuteSqlCommand(sql, parameters);
await db.SaveChangesAsync();
return Ok();
作爲附帶說明['CREATE PROCEDURE'](http://msdn.microsoft.com/en -us/library/ms187926.aspx):「避免在命名過程中使用** sp _ **前綴,這個前綴被SQL Server用來指定系統過程,使用前綴可能會導致應用程序代碼中斷一個同名的系統程序「。 – 2014-10-09 07:25:43
使用try catch http://msdn.microsoft.com/en-IN/library/ms175976.aspx – NMK 2014-10-09 07:26:46
Try @@ RowCount(http://msdn.microsoft.com/en-us/library/ms187316.aspx)。最後看例子。 – NeverHopeless 2014-10-09 07:35:47