⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 errmsgdemo3.sql

📁 T-SQL示例大全
💻 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 + -