MS SQL server:写一个触发器,禁止有人删除 X表中的 Y列
MSSQLserver:写一个触发器,禁止有人删除X表中的Y列谢谢SQL2000的数据库不是被删整个表帐号表X中的帐号列Y假如有200行Y我如何防止别人查看过帐号表就随意...
MS SQL server:写一个触发器,禁止有人删除 X表中的 Y列 谢谢
SQL2000的数据库
不是被删整个表
帐号表X 中的 帐号列 Y 假如有200行 Y
我如何防止别人查看过帐号表就随意删除1行帐号呢
麻烦写的详细点 最好带上说明 注释之类的 好让我这个数据库小白也能看明白
我只知道delete是删除的意思
谢谢所有朋友的解答 但是分只能给让我能用上也能知道具体意思的人! 展开
SQL2000的数据库
不是被删整个表
帐号表X 中的 帐号列 Y 假如有200行 Y
我如何防止别人查看过帐号表就随意删除1行帐号呢
麻烦写的详细点 最好带上说明 注释之类的 好让我这个数据库小白也能看明白
我只知道delete是删除的意思
谢谢所有朋友的解答 但是分只能给让我能用上也能知道具体意思的人! 展开
5个回答
展开全部
先建立测试表
1> CREATE TABLE x ( y INT);
2> go
自定义错误
1> EXEC sp_addmessage 60010, 16,
2> @msgtext = N'Unable to delete this recors',
3> @lang = 'us_english'
4> go
1>
2> EXEC sp_addmessage 60010, 16,
3> @msgtext = N'该记录不允许删除',
4> @lang = '简体中文'
5> go
触发器
1> drop TRIGGER AfterDeleteX
2> go
1> CREATE TRIGGER AfterDeleteX
2> ON x
3> FOR DELETE
4> AS
5> BEGIN
6> -- 回滚事务。
7> ROLLBACK;
8>
9> -- 抛出自定义错误
10> RAISERROR(60010, 16, 1);
11>
12> END;
13> go
测试插入/删除/查询
1> insert into x values (1);
2> go
(1 行受影响)
1> delete from x where y = 1;
2> go
消息 60010,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,过程 AfterDeleteX,第 10
行
该记录不允许删除
消息 3609,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,第 1 行
事务在触发器中结束。批处理已中止。
确认数据是否还在.
1> select * from x;
2> go
y
-----------
1
(1 行受影响)
1> CREATE TABLE x ( y INT);
2> go
自定义错误
1> EXEC sp_addmessage 60010, 16,
2> @msgtext = N'Unable to delete this recors',
3> @lang = 'us_english'
4> go
1>
2> EXEC sp_addmessage 60010, 16,
3> @msgtext = N'该记录不允许删除',
4> @lang = '简体中文'
5> go
触发器
1> drop TRIGGER AfterDeleteX
2> go
1> CREATE TRIGGER AfterDeleteX
2> ON x
3> FOR DELETE
4> AS
5> BEGIN
6> -- 回滚事务。
7> ROLLBACK;
8>
9> -- 抛出自定义错误
10> RAISERROR(60010, 16, 1);
11>
12> END;
13> go
测试插入/删除/查询
1> insert into x values (1);
2> go
(1 行受影响)
1> delete from x where y = 1;
2> go
消息 60010,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,过程 AfterDeleteX,第 10
行
该记录不允许删除
消息 3609,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,第 1 行
事务在触发器中结束。批处理已中止。
确认数据是否还在.
1> select * from x;
2> go
y
-----------
1
(1 行受影响)
参考资料: http://hi.baidu.com/wangzhiqing999/blog/item/126bdc0c7a7dd79b0a7b829d.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先请说清楚你想要的是行触发,还是语句级触发,一条DELETE语句可以删除很多行,假设一条语句删除10行,你要触发10次,还是1次?
触发器的具体格式如下:
CREATE OR REPLACE TRIGGER TR_DELETE
BEFORE DELETE
ON (TABLE_NAME)
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW --这里是行触发
DECLARE
BEGIN
EXCEPTION WHEN OTHERS THEN
NULL;
END CUSTPO_Customer;
触发器的具体格式如下:
CREATE OR REPLACE TRIGGER TR_DELETE
BEFORE DELETE
ON (TABLE_NAME)
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW --这里是行触发
DECLARE
BEGIN
EXCEPTION WHEN OTHERS THEN
NULL;
END CUSTPO_Customer;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要一个排序字段或者主键,来判断哪条为第一条记录。
create trigger tri_delete
on table1 instead of delete
as
begin
declare @id int
select top 1 @id=id from table1 order by id ------取table1的第一条记录的id
delete from table1 where exists(select * from deleted where id=table1.id and id<>@id)-------删除table1中id不等于第一条记录id的记录。
end;
create trigger tri_delete
on table1 instead of delete
as
begin
declare @id int
select top 1 @id=id from table1 order by id ------取table1的第一条记录的id
delete from table1 where exists(select * from deleted where id=table1.id and id<>@id)-------删除table1中id不等于第一条记录id的记录。
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
print '禁止删除y列的内容';
rollback;
end
rollback;
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询