当 WHERE 存在时 sql server 更新

Posted

技术标签:

【中文标题】当 WHERE 存在时 sql server 更新【英文标题】:sql server update when WHERE exist 【发布时间】:2014-07-14 06:41:08 【问题描述】:

我有 sql + php 查询,我需要在更新失败示例时通知用户:

$sql = "UPDATE db SET
date = GetDate(),
...
...
...

WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' 
";
sqlsrv_query( $con, $sql);

现在如果 php 变量值不是 100% 匹配 db 更新中的值失败但用户看不到。他可以检查记录,然后再试一次。我想在查询没有更新时通知他。

【问题讨论】:

sqlsrv_query 之后尝试sqlsrv_rows_affected($con),如果返回0,则没有任何变化 【参考方案1】:

就像 GOB 评论的那样,您可以使用 PHP sqlsrv_rows_affected 函数来检索受影响的行数。例如:

$stmt = sqlsrv_query( $conn, $sql , $params, $options );
$row_count = sqlsrv_rows_affected( $stmt );
if ($row_count === false)
   echo "Error in retrieving row count.";
else
   echo $row_count;

【讨论】:

【参考方案2】:

在直接执行更新查询之前,检查更新查询中的条件是否存在。这可以通过选择该条件的计数来完成。

试试下面的代码:

$sql = "select count(*) as count from db WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' ";
while($row = mysqli_fetch_array($sql))

    $count = $row['count'];


if($count == 0)

   echo 'update will fail';

else

$sql = "UPDATE db SET
date = GetDate(),
...
...
...

WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' 
";

【讨论】:

您的selectupdate 之间可能还有另一个查询。不过可能是可以接受的风险:)

以上是关于当 WHERE 存在时 sql server 更新的主要内容,如果未能解决你的问题,请参考以下文章

sql server 判断记录存在更新不存在插入

SQL Server-聚焦WHERE Column=@Param OR @Param IS NULL有问题?

为啥当我的查询有 Where 时 SQL Server 有更多的 I/O?

SQL Server:插入条件

4.09 当相应行存在时更新

SQL WHERE EXISTS 掩盖了子查询中的错误