解释两个不同更新之间的差异

时间:2014-12-16 08:00:05

标签: sql vbscript ado

我有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

他无法解释哪一个应该更好,我也不能。 我唯一的区别是,当没有要更新的结果时,第二个查询的更新崩溃。

任何人都可以解释其中的区别吗?

2 个答案:

答案 0 :(得分:2)

总结一下:

第一种方法(参数化查询/预准备语句)是best,因为它

  1. 很简单:自动引用和格式化参数
  2. 可以更高效:DBMS可以优化
  3. 避免获取和存储结果集(@Ansgar)
  4. 更好地扩展:适用于许多记录而无需更改
  5. 防范SQL注入
  6. 第二种方法更糟糕,因为没有功能1 - 5和最差/天真,因为没有检查空记录集(@peter,@ Citage)。

答案 1 :(得分:0)

这里的区别在于vbscript环境向数据库发送的SQL代码。在第一个查询中,SQL很清楚,你做了一个简单的UPDATE。在第二个查询中 - 您需要找到从vbscript发送到DB的确切SQL代码,可能是通过运行跟踪,设置一些较低级别的日志记录或类似的东西。我的猜测是第二个查询循环并在循环中为每个给定的ID执行UPDATE,但不检查记录集是否为空(以及它失败的原因)。