如何使用存储过程从SQL Server插入中获取标识值?

时间:2015-04-10 17:29:00

标签: sql sql-server stored-procedures razor sql-server-2014

我正在使用Microsoft Razor网站并将存储过程称为:

db.QuerySingle("Exec dbo.InsertSurvey @city=@0, @age=@1, @sport=@2, 
  @firstsport=@3, @secondsport=@4, @thirdsport=@5, @Survey_ID=@6", 
  searchTerm, selectage, selectsport, firstsport, secondsport, thirdsport, returnval);

插入工作正常,但我没有收到返回的标识值。

存储过程是:

ALTER PROCEDURE [dbo].[InsertSurvey] 
    -- Add the parameters for the stored procedure here
    @city varchar(50),
    @age varchar(50),
    @sport varchar(50),
    @firstsport varchar(50),
    @secondsport varchar(50),
    @thirdsport varchar(50),
    @Survey_ID int output
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO [dbo].[Survey]
           ([City]
           ,[Age]
           ,[Favorite_Professional_League]
           ,[First_Professional_League]
           ,[Second_Professional_League]
           ,[Third_Professional_League])
     VALUES
           (@city
           ,@age
           ,@sport
           ,@firstsport
           ,@secondsport
           ,@thirdsport)
    SET @Survey_ID=SCOPE_IDENTITY()
END

似乎我应该指定我对存储过程的调用中的@Survey_ID参数是用于输出而不是输入。

2 个答案:

答案 0 :(得分:0)

数据库帮助程序不支持输出参数。它从未设计用于存储过程。您可以使用普通的ADO.NET,也可以使用QueryValue方法https://msdn.microsoft.com/en-us/library/webmatrix.data.database.queryvalue(v=vs.111).aspx

答案 1 :(得分:0)

我使用了以下组合:

SELECT @Survey_ID AS id RETURN

在存储过程中,并且:

var procSurvey = db.QueryValue("Exec sp...")
代码中的

。它现在有效。谢谢你的帮助。