In MySQL können Sie die Funktion --safe-updates
( --i-am-a-dummy
) verwenden, um die Anzahl der pro Abfrage aktualisierten Zeilen zu begrenzen.
http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html#safe-updates
Gibt es so etwas in MS SQL Server?
In MySQL können Sie die Funktion --safe-updates
( --i-am-a-dummy
) verwenden, um die Anzahl der pro Abfrage aktualisierten Zeilen zu begrenzen.
http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html#safe-updates
Gibt es so etwas in MS SQL Server?
Antworten:
Möglicherweise gibt es so etwas in MS SQL oder nicht, aber warum sollten Sie das wollen?
Es gibt bereits eine Möglichkeit, die UPDATE
Auswirkungen einzuschränken (die WHERE
Klausel).
Es gibt bereits einen Mechanismus zum Schutz Ihrer Daten bei Änderungen (Transaktionen).
Wenn wir beide kombinieren, erhalten wir die allgemeine Lösung: "Führen Sie Ihre Aktualisierungen in einer Transaktion mit den entsprechenden WHERE-Klauseln durch, um zu begrenzen, was sie berühren, und stellen Sie sicher, dass die Ergebnisse richtig aussehen, bevor Sie sich verpflichten":
> 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
Es ist pro Abfrage mit TOP, wenn Sie möchten.
UPDATE TOP(100) Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
SET ROWCOUNT hat Nebenwirkungen auf Zwischenzählungen, die zu irreführenden Ergebnissen führen, weshalb es langsam veraltet ist. Das erste MSDN-Beispiel zeigt dies
Glücklicherweise verfügt SQL Server als erwachsenes RDBMS über Datenbank-Snapshots und konsistente Online-Backups, die eine Wiederherstellung zu einem bestimmten Zeitpunkt ermöglichen, falls Sie dies nicht tun ...
Ich glaube nicht - eines der ersten Dinge, die ich gelernt habe, war, zuerst eine SELECT-Anweisung mit den richtigen WHERE-Klauseln zu schreiben, um sicherzustellen, dass sie richtig ist, und dann SELECT in ein UPDATE zu ändern.
Wenn Sie diese Art von Verhalten nachahmen möchten, können Sie nur die Anzahl der Zeilen mit TSQL begrenzen.
Hier ist ein Beispiel aus den SQL Server-Dokumenten:
SET ROWCOUNT 4;
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
GO
Laut http://msdn.microsoft.com/en-us/library/ms188774.aspx :
Die Verwendung von SET ROWCOUNT wirkt sich in der nächsten Version von SQL Server nicht auf die Anweisungen DELETE, INSERT und UPDATE aus. Verwenden Sie SET ROWCOUNT nicht mit den Anweisungen DELETE, INSERT und UPDATE in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die es derzeit verwenden. Für DELETE-, INSERT- und UPDATE-Anweisungen, die derzeit SET ROWCOUNT verwenden, empfehlen wir, sie neu zu schreiben, um die TOP-Syntax zu verwenden. Weitere Informationen finden Sie unter DELETE (Transact-SQL), INSERT (Transact-SQL) oder UPDATE (Transact-SQL).
Daher kann SQL Server 2012 nicht SET ROWCOUNT
mit der oben genannten DML arbeiten.
Wenn Sie Bedenken haben, die unbeabsichtigt destruktiv sein können:
Abgesehen von diesen Dingen liegen alle anderen Funktionen der --safe-Updates von mysql in Ihrer Verantwortung.
UPDATE TOP (4) Production.ProductInventory ...
seit SQL Server 2005 verwenden ...