我正在尝试使用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
有任何帮助吗? (再次抱歉,如果这是一个愚蠢的问题,我对这个东西不熟悉)
答案 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);