SQL返回自动递增的ID

时间:2014-02-07 09:57:39

标签: sql return auto-increment

我正在尝试使用SQL并将其与ASP Classic结合使用。我正在插入数据库,但遇到了一个问题,插入工作正常,但我希望能够将变量设置为插入后生成的ID的值(它是一个自动 - incrementmemnting字段,因此每次插入时都会创建一个新ID,然后将此变量的值返回给用户。 这是我目前得到的:( QuestionID是自动增加ID)

     set rs=Server.CreateObject("ADODB.recordset")
     rs.Open "Select * from Questions", conn
     sql="DECLARE @id int"     
     sql=sql & "INSERT INTO Questions(QuestionText, QuestionType)"
     sql=sql & " VALUES "
     sql=sql & "@id = Inserted.QuestionID;"
     sql=sql & "('" & qtext & "',"
     sql=sql & "'" & "checkbox" & "')"
     Response.Write("<br/>" & @id & "<br/>" )

     on error resume next
     conn.Execute sql,recaffected
     if err<>0 then
     Response.Write("An Error Has Occured")
     else
     Response.Write("Data Added")
     end if
     conn.close

有任何帮助吗? (再次抱歉,如果这是一个愚蠢的问题,我对这个东西不熟悉)

3 个答案:

答案 0 :(得分:1)

在同一个查询中,最后添加。

select @@identity as ID

关于这个全局变量的书籍和一些不错的函数做类似的事情。

P.S。你的应用程序容易出现sql注入攻击

答案 1 :(得分:1)

在大多数情况下,您会更喜欢scope_identity()的结果,而不是@@identity的结果。它们非常相似,但scope_identity()仅限于当前会话范围。

相反,@@identity仅限于当前会话。这意味着它可能会返回由您可能知道或可能不知道存在的DML触发器插入的行的标识值。

可以肯定的是,这是一个优势,但scope_identity()几乎总能让你感觉更好。

答案 2 :(得分:0)

您可以使用SCOPE_IDENTITY()@@identity

SET @id=SCOPE_IDENTITY()
      RETURN  @id

string id = cmd.Parameters["@id"].Value.ToString() ;
Response.Write("data added ID = " +  id);