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
该函数正常工作并正确执行插入语句,并且 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。