Để trả về một giá trị vô hướng duy nhất để người gọi bạn nên sử dụng một tham số OUTPUT
, không RETURN
. RETURN
là mã lỗi/trạng thái. Cũng tiền tố sp là dư thừa và không cần thiết.
CREATE PROCEDURE dbo.AddAsset
@Name VARCHAR(500),
@URL VARCHAR(2000),
@new_identity INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.Assets(Name, URL) SELECT @Name, @URL;
SET @new_identity = SCOPE_IDENTITY();
END
GO
Sau đó, để gọi nó là:
DECLARE @new_identity INT;
EXEC dbo.AddAsset @Name = 'a', @URL = 'b', @new_identity = @new_identity OUTPUT;
PRINT @new_identity;
EDIT chỉ cần thêm một từ chối trách nhiệm đó sẽ không ảnh hưởng đến hỏi trong tình huống cụ thể này, nhưng có thể giúp trong các kịch bản khác hoặc cho độc giả trong tương lai. Trong SQL Server 2008 R2 và trước đó, có một potentially nasty bug với các hàm dựng sẵn như SCOPE_IDENTITY
khi song song được sử dụng để lấy được kết quả được chèn vào (suy nghĩ INSERT FROM othertable
). Lỗi này (here is the Connect item) được sửa trong Cumulative Update #5 for SQL Server 2008 R2 SP1, nhưng cho đến nay bản sửa lỗi chưa xuất hiện cho 2008 R2 RTM, 2008 hoặc 2005.
Nguồn
2012-03-04 18:27:39
Xin lỗi. Tôi sẽ bỏ phiếu phần còn lại. –