2010-10-15 39 views
6

Quy trình lưu trữ này không hoạt động. Tôi đã kiểm tra SQL và nó trả về giá trị chính xác khi được phân tích cú pháp trực tiếp đến DB. Nó thực sự kỳ lạ! Nó chỉ trả về 0 hàng.thủ tục lưu trữ trả về không có gì

Điều gì có thể sai?

ALTER PROCEDURE dbo.GetSaltOfUser 

(
@eMail nvarchar 

) 

AS 
DECLARE @result nvarchar 
/* SET NOCOUNT ON */ 
BEGIN 
    SELECT @result = salt 
    FROM UserSet 
    WHERE eMail = @eMail 
    RETURN @result 
END 
+0

H ow là bạn gọi nó là – rerun

+0

Từ nơi tôi viết nó trong Visual studio. Tôi nhấp chuột phải và chọn Execute. – Phil

+0

Bạn xác định giá trị trả lại như thế nào? –

Trả lời

6
@eMail nvarchar 

sẽ cắt ngắn được thông qua vào email cho một ký tự. Bạn cần phải đặt trong một chiều dài. ví dụ.

@eMail nvarchar(50) 

này phải phù hợp với kiểu dữ liệu của cột có liên quan trong UserSet

Ngoài ra bạn có thực sự muốn được sử dụng mã để đổi lấy này hoặc làm bạn muốn sử dụng một output parameter lẽ - hay chỉ là một vô hướng chọn ?

ALTER PROCEDURE dbo.GetSaltOfUser 

    (
    @eMail nvarchar (50),  /*Should match datatype of UserSet.eMail*/ 
    @salt nvarchar (50) OUTPUT /*Should match datatype of UserSet.salt*/ 
) 

AS 
BEGIN 
    SET NOCOUNT ON 

    SELECT @result = salt 
    FROM UserSet 
    WHERE eMail = @eMail 
END 

Và để gọi nó là

DECLARE @salt nvarchar(50) 
EXECUTE dbo.GetSaltOfUser N'[email protected]', @salt OUTPUT 
SELECT @salt 
+0

Oh rằng đơn giản? Cảm ơn, tôi may mắn tôi đã gặp phải điều này sớm trong dự án. – Phil

+0

Và để trả lời câu hỏi của bạn; đúng là tôi đang tìm tham số đầu ra. Có thực hành tốt hơn để luôn luôn có một paramter đầu ra mặc dù lệnh là khá đơn giản? – Phil

+0

@Phil - Có. Tôi tin rằng một tham số 'OUTPUT' là trọng lượng nhẹ hơn so với việc chọn vô hướng. –

1

Bạn không cần phải gán các salt cho một biến.

CREATE PROCEDURE dbo.GetSaltOfUser 
(
    @eMail nvarchar  
) 
AS 
BEGIN 
    SELECT salt 
    FROM UserSet 
    WHERE eMail = @eMail 
END 
+0

Có vẻ như, tôi KHÔNG THỂ trả về một var vì nó phải là một số nguyên? Điều này chỉ áp dụng cho lệnh "RETURN"? – Phil

+0

Nó sẽ trả về 'muối' trong bất kỳ kiểu dữ liệu nào. Bạn có thể đúc nó như bất cứ điều gì bạn muốn, với phạm vi rõ ràng. 'CAST (muối AS nvarchar (50)) AS muối ' –

1

Hai Cents từ cuối tôi

  • Tốt bạn đang sử dụng SET NOCOUNT ON
  • Luôn luôn sử dụng RETURN để trở lại mã trạng thái, Ví dụ 0- thành công, 1 - thất bại
  • Sử dụng SELECT để trả lại ROWS
  • Sử dụng Try Catch để xử lý các điều kiện lỗi
Các vấn đề liên quan