Return-Wert in der gespeicherten Prozedur in SQL Server
Ich versuche, eine SQL Server gespeicherte Prozedur mit ASP:
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
und die ASP ist
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
Wenn ich das SP in die SQL Server-terminal, das es funktioniert, aber wenn ich den asp-code, wenn es ein "neuer Benutzer", ich bekomme keine Wert zurückgeben "index1"
Was kann ich tun?
- vielleicht haben Sie bereits Benutzer mit dieser E-Mail, in der Tabelle prüfen, da die SP nicht zurück/irgendetwas tun, wenn das wahr ist
- Ich spreche kein ASP, aber im Allgemeinen ich denke, Sie brauchen, um einen parameter erstellen, der mit einem speziellen flag Bedeutung "dies ist der SP Rückgabewert parameter'. Nicht sicher über den Namen, aber wenn ich ADO in Delphi, es ist immer den Namen
@RETURN_VALUE
. Jemanden mit ASP-hintergrund sollte sicherlich helfen, mehr auf den Kopf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Änderung adParamReturnValue wie die andere Antwort besagt.
Müssen Sie auch zum unterdrücken des ersten resultset, mit SET NOCOUNT ON. Auch Sie sollten aufhören, mit @@IDENTITY, SCOPE_IDENTITY verwenden statt.
Hinweis: können Sie auch weglassen, das RETURN 0 am Ende, da 0 ist die Standardeinstellung Ergebnis zurückgeben.
Ihre parameter Richtung ist
adParamOutput
(2), sollte aberadParamReturnValue
(4):Sehen die
ParamDirctionEnum
, dassCreateParameter
nimmt.@
vom parameter-Namen.