The only way is to not to let user edit data using SQL Server 2000 Query Analyser! But then you'll have to write an application and control the data, and you can then issue warnings as necessary.
Short of that, you could add triggers to every table and set some sort limit where you issue a ROLLBACK if the rows affected is greater than X. You could even use something like SUSER_NAME() to apply the limit to certain users.
sample trigger:
CREATE TRIGGER Trigger_YourTable ON YourTable
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Limit int
DECLARE @Message varchar(100)
SET @Limit=5
SET @Message='ERROR, Not Permitted to alter more than '+CONVERT(varchar(5),@Limit)+' rows at any one time.'
IF SUSER_NAME() !='AwesomeSA'
BEGIN
IF @Limit<(SELECT COUNT(*) FROM INSERTED)
BEGIN
ROLLBACK
RAISERROR(@Message, 16, 1);
RETURN
END
ELSE IF @Limit<(SELECT COUNT(*) FROM DELETED)
BEGIN
ROLLBACK
RAISERROR(@Message, 16, 1);
RETURN
END
END
GO
to automatically generate all the triggers scripts run this (does not actually add them in the database, just produce the text script which you should edit and then run):
DECLARE @SQL varchar(8000)
SET @SQL='PRINT ''CREATE TRIGGER [''+REPLACE(REPLACE(REPLACE(''Trigger_?'',''['',''''),'']'',''''),''.'',''_'')+''] ON ?''; PRINT ''FOR INSERT, UPDATE, DELETE
AS
DECLARE @Limit int
DECLARE @Message varchar(50)
SET @Limit=5
SET @Message=''''ERROR, Not Permitted to alter more than ''''+CONVERT(varchar(5),@Limit)+'''' rows at any one time.''''
IF SUSER_NAME() !=''''AwesomeSA''''
BEGIN
IF @Limit<(SELECT COUNT(*) FROM INSERTED)
BEGIN
ROLLBACK
RAISERROR(@Message, 16, 1);
RETURN
END
ELSE IF @Limit<(SELECT COUNT(*) FROM DELETED)
BEGIN
ROLLBACK
RAISERROR(@Message, 16, 1);
RETURN
END
END
GO'''
EXEC sp_msforeachtable @SQL
all tables will have an affected row limit of 5 unless you login as user "AwesomeSA". The above script will generate the code, not actually create the triggers. You can edit the output of this script, setting good row limits, users, etc. and then run that script and then the triggers will be created.