在SQL Server中触发特定单元格

时间:2015-04-06 15:50:36

标签: sql sql-server database triggers

我有一个用户的SQL Server数据库。我想让一个特定用户不要改变他的照片。我不相信有一种方法可以使单个单元格不可变但是有一种方法可以创建一个被调用的触发器,这样每当这个人改变他的图片时(newpicture.jpg),UPDATE就会回滚或数据值是否改变为所需的值(justin.jpg)?

我不是SQL专家,但这是我到目前为止所拥有的

CREATE TRIGGER justin ON Users
AFTER UPDATE
AS
IF EXISTS (SELECT ImagePath from Users WHERE Id = '[justin's id]')
BEGIN
ROLLBACK TRANSACTION;
RETURN
END;
GO

这样做的问题在于它只检查特定用户是否已有图片,然后保持整个表(而不仅仅是该特定用户)的更新。

简而言之,我只想让我的朋友Justin能够改变他现在的照片,这是他从果汁盒中喝水的。提前感谢您的建议。

2 个答案:

答案 0 :(得分:0)

如果您只想限制此特定用户使用除预定义值之外的任何ImagePath值,则只需使用CHECK CONSTRAINT

ALTER TABLE Users
ADD CONSTRAINT CHK_Justin 
   CHECK ( ([UserId] <> 'Justin') OR 
           ([UserId] = 'Justin') AND (ImagePath = '/images/fixedPic.jpg'))

答案 1 :(得分:0)

而不是回滚整个事务只是在更新后更新:

CREATE TRIGGER justin 
ON Users
AFTER UPDATE
AS
BEGIN
    UPDATE Users
    SET [ImagePath] = '/images/fixedPic.jpg'
    WHERE [UserId] = '[justins id]'
END;
GO