MSSQL: 禁止字段值相加(mssql字段不能相加)
减
在MSSQL Server中禁止字段值相加减,例如不能对列“Money”做 Money1+Money2,Money3-Money4。要实现这一目标,我们可以使用MSSQL Server中的系统函数:
一、使用表触发器(Trigger)来禁止相加减行为
使用表触发器是最简单有效也是推荐的做法,下面的例子中,我们禁止了Money字段值的相加减操作:
— 针对表TableName创建触发器
CREATE TRIGGER TableName
ON TableName
FOR INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @MoneyCol int;
SELECT @MoneyCol = SUM(Money) FROM TableName;
–判断表中Money字段值之和是否为0
IF @MoneyCol 0
BEGIN
–当字段值之和不为0时抛出错误信息
raiserror (‘Error Message: Sum of Money Columns cannot be non-zero!’, 16, 1);
ROLLBACK;
END
END
这是表触发器,在任何插入,更新或删除行为发生时,它都将会被触发,用来验证字段值之和是否为0,如果不为0,那么会抛出错误信息,并且回滚该次系统事务。
二、使用存储过程(Stored Procedure)或用户定义函数(User Defined Function)来禁止相加减行为
如果给表添加一个触发器感觉不太好,我们也可以使用存储过程(Stored Procedure)或用户定义函数(User Defined Function),来完成相同的任务,下面是存储过程(Stored Procedure)的例子:
— 创建存储过程
CREATE PROCEDURE [dbo].usp_Check_MoneyColumn
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MoneyCol int
SELECT @MoneyCol = SUM(Money) FROM TableName;
–判断表中Money字段值之和是否为0
IF @MoneyCol 0
BEGIN
–当字段值之和不为0时抛出错误信息
raiserror (‘Error Message: Sum of Money Columns cannot be non-zero!’, 16, 1);
END
END
在程序中,在给表赋值时就可以调用这个存储过程,从而完成禁止相加减行为的任务。
总的来说,我们可以使用表触发器,存储过程或是用户定义函数,来实现MSSQL Server中禁止字段值相加减的目标。通过使用这些系统函数,我们可以更好地保护我们的数据,而不必担心数据被意外修改。
相关文章