有一个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之前输出。
答案 0 :(得分:0)
您正在将该函数分配给实际的Field对象,当您离开声明的范围时,该对象将无效。
这应该可以正常工作:
sqlInsert = CStr(rs("NewID").Value)
之后关闭记录集并设置为Nothing。