MS SQL Server 中 mysql 的 --safe-updates 的等价物是什么?

use*_*730 7 mysql sql-server-2008

在 MySQL 中,您可以使用名为--safe-updates( --i-am-a-dummy)的功能来限制每个查询更新的行数。

http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html#safe-updates

MS SQL Server 中有这样的东西吗?

vor*_*aq7 10

MS SQL 中可能有也可能没有这样的东西,但你为什么要这样呢?

已经有一种方法可以限制UPDATE影响(WHERE子句)的内容。
已经有一种机制可以在进行更改(事务)时保护您的数据。

将两者结合起来,我们得到了一般情况的解决方案:“在事务中进行更新,使用适当的 WHERE 子句来限制它们接触的内容,并确保在提交之前结果看起来正确”:

> BEGIN;
> UPDATE mytable SET foostring='NewValue' WHERE id > 16 AND id < 32;
15 Rows Updated

> SELECT * FROM mytable;

  [Omitted -- Make sure it looks right]

> COMMIT;  --- Or ROLLBACK if the SELECT doesn't look right
Run Code Online (Sandbox Code Playgroud)

  • 如果未经授权的用户以某种方式访问​​您的数据库,您就会遇到更大的问题。如果您在喝醉或以其他方式醉酒时工作。. . ***别***。 (4认同)
  • @user893730:“未经授权的用户”只能执行“SET sql_safe_updates=0;”。(更不用说他们可以放下桌子) (3认同)

gbn*_*gbn 5

如果需要,它是使用 TOP 的每个查询。

UPDATE TOP(100) Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
Run Code Online (Sandbox Code Playgroud)

SET ROWCOUNT对中间计数有副作用,这会产生误导性的结果,这就是它慢慢被弃用的原因。第一个 MSDN 示例演示了这个

幸运的是,SQL Server 作为一个成熟的 RDBMS 具有数据库快照和在线一致备份,可提供时间点恢复,以防您对它进行 foobar...


Pet*_*eld 4

我不这么认为 - 我学到的第一件事就是首先使用正确的 WHERE 子句编写 SELECT 语句以确保它是正确的,然后将 SELECT 更改为 UPDATE。