0

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。

4

1 回答 1

0

您正在将该函数分配给实际的 Field 对象,当您超出其声明的范围时,该对象将变得无效。

这应该可以正常工作:

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

之后还要关闭记录集并设置为空。

于 2013-06-30T12:25:40.397 回答