2011-02-12 54 views
8

我試圖用ASP與SQL Server存儲過程:在存儲過程中的SQL Server返回值

ALTER PROCEDURE [dbo].[user_insert] 
    @firstName NVARCHAR(50) , 
    @lastName NVARCHAR(50) , 
    @cityid INT , 
    @email NVARCHAR(100) , 
    @password NVARCHAR(12) , 
    @Affiliate INT 
AS 
    BEGIN 
     DECLARE @index1 INT 
     SET @index1 = 0      
     IF (NOT EXISTS (SELECT * FROM  dbo.tbl_users 
          WHERE  user_email = @email) ) 
      BEGIN         
       INSERT INTO dbo.tbl_users 
         (user_first_name , 
          user_last_name , 
          city_id , 
          user_email , 
          user_password , 
          Affiliate_id 
         ) 
       VALUES (@firstName , 
          @lastName , 
          @cityid , 
          @email , 
          @password , 
          @Affiliate 
         ) 
       SET @index1 = (SELECT @@IDENTITY 
      END 
     RETURN @index1 
    END 

和ASP是

Set oCmd = Server.CreateObject("ADODB.Command") 
oCmd.ActiveConnection = conn 
oCmd.CommandText = "user_insert" 
oCmd.CommandType = 4 

oCmd.Parameters.Append oCmd.CreateParameter("firstName", 203, 1, 100, "1") 
oCmd.Parameters.Append oCmd.CreateParameter("lastName", 203, 1, 100, "2") 
oCmd.Parameters.Append oCmd.CreateParameter("cityid", 3, 1, 2, 1) 
oCmd.Parameters.Append oCmd.CreateParameter("email", 200, 1, 100, txtmail) 
oCmd.Parameters.Append oCmd.CreateParameter("password", 203, 1, 12, "2") 
oCmd.Parameters.Append oCmd.CreateParameter("Affiliate", 3, 1, 3, 1) 
oCmd.Parameters.Append oCmd.CreateParameter("@index1", 3, 2) 
Set rs = oCmd.Execute 
response.write oCmd.Parameters("@index1").Value &"<br>" 
Set oCmd = Nothing 

如果我在SQL運行SP服務器終端它的工作,但是當我使用asp代碼,如果它是一個「新用戶」,我沒有得到任何值返回「index1」

我該怎麼辦?

+0

也許你已經在表中使用該電子郵件了,請檢查一下,因爲你的SP不返回/做任何事情時,這是真的 – 2011-02-12 19:00:10

+0

我不會說ASP,但通常我認爲你需要創建一個參數與一個特殊的標誌,意思是「這是SP返回值參數」。不知道名稱,但是當我在Delphi中使用ADO時,它總是被命名爲「@ RETURN_VALUE」。有ASP背景的人當然應該幫助更多的人。 – 2011-02-12 19:06:27

回答

8

更改爲adParamReturnValue作爲其他答案狀態。

您還需要抑制第一個結果集,使用SET NOCOUNT ON。你也應該停止使用@@ IDENTITY,而是使用SCOPE_IDENTITY。

ALTER PROCEDURE [dbo].[user_insert] 
    @firstName nvarchar(50), 
    @lastName nvarchar(50), 
    @cityid int, 
    @email nvarchar(100), 
    @password nvarchar(12), 
    @Affiliate int 
AS BEGIN 
    SET NOCOUNT ON 

    IF (not EXISTS (SELECT * FROM dbo.tbl_users WHERE [email protected])) 
    begin         
     INSERT INTO dbo.tbl_users(user_first_name, user_last_name, city_id, user_email, user_password, Affiliate_id)   
     VALUES(@firstName, @lastName, @cityid, @email, @password, @Affiliate) 

     --set 
     RETURN SCOPE_IDENTITY() 
    end 

    RETURN 0 
end 

注:你甚至可以省略在年底返回0,因爲0是默認的返回結果。

2

你的參數方向爲adParamOutput(2),但應該是adParamReturnValue(4):

oCmd.Parameters.Append oCmd.CreateParameter("@index1", 3, 4) 

參見ParamDirctionEnumCreateParameter需要。

相關問題