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是删除的意思

谢谢所有朋友的解答 但是分只能给让我能用上也能知道具体意思的人!
展开
 我来答
feixianxxx
2011-02-07 · TA获得超过2202个赞
知道大有可为答主
回答量:1273
采纳率:100%
帮助的人:1760万
展开全部
1、如果你问的是如何禁止删除x表的y列 这个列 这个属于ddl操作,sql server2000是无法做到控制ddl操作的,也就是说 它不支持ddl触发器。所以只能通过程序来控制

2、如果你问的是如何禁止删除x表的y列的内容 而不是删除整个列 那可以使用触发器(不过这样意义不大)
create trigger tr_d on X
before delete
begin
print '禁止删除y列的内容';
rollback;
end
wangzhiqing999
2011-02-09 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3363万
展开全部
先建立测试表
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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lvpin1005
2011-02-07 · 超过35用户采纳过TA的回答
知道答主
回答量:107
采纳率:0%
帮助的人:96万
展开全部
首先请说清楚你想要的是行触发,还是语句级触发,一条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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhsatq
2011-02-08 · TA获得超过1151个赞
知道小有建树答主
回答量:1052
采纳率:33%
帮助的人:776万
展开全部
需要一个排序字段或者主键,来判断哪条为第一条记录。
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小星而
2011-02-07 · TA获得超过973个赞
知道答主
回答量:197
采纳率:0%
帮助的人:59万
展开全部
print '禁止删除y列的内容';
rollback;
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式