ASP函数没有返回mssql插入id

时间:2013-06-30 03:24:10

标签: sql-server asp-classic recordset

有一个mssql插入的奇怪问题,并尝试通过函数调用检索插入ID。奇怪的是提取了最后一个插入ID,我可以在函数中打印它,但如果我按以下方式构造我的sql语句,它会通过函数返回一个空值:

function sqlInsert(table, byVal fieldList)

    sqlInsert = 0 ' default in case of error
    .... ' removed code that builds sql for simplicity
    sql  = "insert into " & table & " (" & insertFields & ") values (" & insertValues & ")"
    sql = "SET NOCOUNT ON;" & sql & "; SELECT SCOPE_IDENTITY() AS NewID"

    set rs = oCn.Execute(sql)

    response.write rs("NewID") ' 28 for example

    sqlInsert = rs("NewID") ' empty!! 
end function

该函数正常工作并执行insert语句,rs(“NewID”) 包含正确的插入行ID。但是,函数调用没有返回任何内容。例如:

result = sqlInsert("tablename", data)
response.write result 'empty!! 

如果我按如下方式分离sql:

sql  = "insert into " & table & " (" & insertFields & ") values (" & insertValues & ")"
set rs = oCn.Execute(sql)
set rs2 = oCn.Execute("SELECT SCOPE_IDENTITY() AS NewID")
response.write rs2("NewID") '28 for example
sqlInsert = rs2("NewID") '28

....然后它起作用,函数调用的结果包含插入ID。

result = sqlInsert("tablename", data)
response.write result '28 

在这两种情况下,记录集在“NewID”中包含正确的插入ID,但只有第二种方法将id返回给函数调用。为什么?我在第一个例子中尝试了cInt(rs("NewID")),但仍然没有。

我知道我可以使用第二种方法,但第一种方法是少用一次调用数据库,我只是想知道为什么它没有返回值,如果我写的那么显然值存在于rs值中在将它分配给sqlInsert之前输出。

1 个答案:

答案 0 :(得分:0)

您正在将该函数分配给实际的Field对象,当您离开声明的范围时,该对象将无效。

这应该可以正常工作:

sqlInsert = CStr(rs("NewID").Value)

之后关闭记录集并设置为Nothing。