📄 errmsgdemo3.sql
字号:
/* 文件名称: ErrMsgDemo3.sql */
USE master
GO
-- 建立用户自定义错误信息。
-- 您自行加入至系统数据表 sysmessages 中之
-- 用户自定义错误信息的错误代码必须从 50001 开始。
-- 此外,必须先加入英文的用户自定义错误信息,才能
-- 加入当地语言的用户自定义错误信息。
-- 先加入英文的用户自定义错误信息
EXEC sp_addmessage
@msgnum = 60001, @severity = 16,
@msgtext = N'The salary of IT Department should greater than 30000',
@lang = 'us_english',
@replace = 'REPLACE'
-- 再加入中文的用户自定义错误信息
EXEC sp_addmessage
@msgnum = 60001, @severity = 16,
@msgtext = N'资讯部的薪资必须大于或等于 30000',
@replace = 'REPLACE'
-- 先加入英文的用户自定义错误信息
EXEC sp_addmessage
@msgnum = 60002, @severity = 16,
@msgtext = N'The salary of IT Department should greater than 30000,unquilified number is %d,remaining %d record have been written to the table',
@lang = 'us_english',
@replace = 'REPLACE'
-- 再加入中文的用户自定义错误信息
EXEC sp_addmessage @msgnum = 60002, @severity = 16,
@msgtext = N'资讯部的薪资必须大于或等于 30000,不符者有 %1! 人,其余 %2! 个已顺利写入数据表',
@replace = 'REPLACE'
GO
-- -- 删除用户自定义错误信息
-- EXEC sp_dropmessage 60001,'all'
-- EXEC sp_dropmessage 60002,'all'
USE 北风贸易
if exists (select * from dbo.sysobjects where id = object_id(N'MyTable') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table MyTable
GO
CREATE TABLE MyTable
(
编号 char(5) NOT NULL PRIMARY KEY,
姓名 nvarchar(12) NOT NULL,
薪资 money NOT NULL,
部门 nvarchar(20) NOT NULL
)
GO
CREATE TRIGGER ActionTrigger
ON MyTable
AFTER INSERT,UPDATE
AS
-- 变量 @RecordTotal 用来记录新增或更新的个数
DECLARE @RecordTotal int,@NotQualifiedTotal int,@SucceedTotal int
SET @RecordTotal = @@ROWCOUNT
SELECT @NotQualifiedTotal = COUNT(*) FROM inserted WHERE 部门 = '资讯部' AND 薪资 < 30000
SET @SucceedTotal = @RecordTotal - @NotQualifiedTotal
IF ( @NotQualifiedTotal > 0)
BEGIN
IF @RecordTotal = 1
BEGIN
RAISERROR (60001,16,1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
DELETE MyTable FROM MyTable t,inserted i
WHERE t.编号 = i.编号 AND
t.部门 = '资讯部' AND t.薪资 < 30000
RAISERROR (60002,16,1,@NotQualifiedTotal,@SucceedTotal)
END
END
GO
/*--------------------------------开始新增数据记录--------------------------------*/
/*---------------------------请查看所返回的错误信息---------------------------*/
SET NOCOUNT ON
GO
INSERT MyTable VALUES ('E0001','章立民',50000,'资讯部')
INSERT MyTable VALUES ('E0002','王旭刚',40000,'财务部')
GO
BEGIN TRANSACTION
UPDATE MyTable SET 薪资 = 29000 WHERE 姓名 = '章立民'
COMMIT TRANSACTION
GO
DECLARE @TmpTable TABLE
(
编号 char(5) NOT NULL,
姓名 nvarchar(12) NOT NULL,
薪资 money NOT NULL,
部门 nvarchar(20) NOT NULL
)
INSERT @TmpTable VALUES ('E0003','陈小明',50000,'资讯部')
INSERT @TmpTable VALUES ('E0004','李大头',40000,'人事部')
INSERT @TmpTable VALUES ('E0005','王小华',10000,'资讯部')
INSERT @TmpTable VALUES ('E0006','陈小瑜',20000,'资讯部')
INSERT @TmpTable VALUES ('E0007','郑一正',40000,'资讯部')
BEGIN TRANSACTION
-- 一次新增多个
INSERT MyTable SELECT * FROM @TmpTable
COMMIT TRANSACTION
GO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -