我有2个不同的更新查询,1我创建了:
UPDATE_QUERY = ""
UPDATE_QUERY = UPDATE_QUERY & "UPDATE ORGBHVTasklist "
UPDATE_QUERY = UPDATE_QUERY & "SET TaskID = NULL "
UPDATE_QUERY = UPDATE_QUERY & "WHERE TaskID = ? "
set cmd = server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objCon
cmd.CommandText = UPDATE_QUERY
set paramID = cmd.CreateParameter("@id", 3, 1, , taskID)
cmd.Parameters.Append paramID
cmd.execute
我的同事更喜欢这个:
UPDATE_QUERY = ""
UPDATE_QUERY = UPDATE_QUERY & "SELECT taskid "
UPDATE_QUERY = UPDATE_QUERY & "FROM ORGBHVTasklist "
UPDATE_QUERY = UPDATE_QUERY & "Where taskID = "&taskID&" "
set objUpdate = Server.CreateObject("ADODB.Recordset")
objUpdate.CursorType = 2
objUpdate.LockType = 3
objUpdate.Open UPDATE_QUERY, objCon
objUpdate.Fields("taskid") = NULL
objUpdate.Update
objUpdate.close
Set objUpdate = nothing
他无法解释哪一个应该更好,我也不能。 我唯一的区别是,当没有要更新的结果时,第二个查询的更新崩溃。
任何人都可以解释其中的区别吗?
答案 0 :(得分:2)
总结一下:
第一种方法(参数化查询/预准备语句)是best,因为它
第二种方法更糟糕,因为没有功能1 - 5和最差/天真,因为没有检查空记录集(@peter,@ Citage)。
答案 1 :(得分:0)
这里的区别在于vbscript环境向数据库发送的SQL代码。在第一个查询中,SQL很清楚,你做了一个简单的UPDATE。在第二个查询中 - 您需要找到从vbscript发送到DB的确切SQL代码,可能是通过运行跟踪,设置一些较低级别的日志记录或类似的东西。我的猜测是第二个查询循环并在循环中为每个给定的ID执行UPDATE,但不检查记录集是否为空(以及它失败的原因)。