首页 > 学院 > 开发设计 > 正文

触发器和存储过程

2019-11-14 14:18:17
字体:
来源:转载
供稿:网友

触发器

现有字典表(Dict)

字段说明
Id标示
ItemKey
ItemValue
UpperId上层标示

需求一:当新增一条记录的时候,若已存在相同键的,拒绝插入

//操作步骤:展开相关表,右击‘触发器’,新建即可

复制代码
USE [sqlffwj]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TRIGGER [dbo].[CheckKeyRepeated]   ON  [dbo].[Dict]   for INSERTASif(select COUNT(*) from [Dict], inserted inobj where [Dict].ItemKey = inobj.ItemKey and [Dict].Id != inobj.Id) > 0BEGIN    raiserror('已有相同键,不能插入',16,1)    rollback tranEND
复制代码

需求二:当删除一条记录的时候,若有下层记录,拒绝删除

复制代码
USE [sqlffwj]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TRIGGER [dbo].[CheckDependence]   ON  [dbo].[Dict]   for deleteASif(select COUNT(*) from [Dict], deleted delbj where [Dict].UpperId = delbj.Id) > 0BEGIN    raiserror('有下层记录,不能删除',16,1)    rollback tranEND
复制代码

需求三:当删除一条记录的时候,若有下层记录,下层也一起删除

复制代码
USE [sqlffwj]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TRIGGER [dbo].[CheckDependence2]   ON  [dbo].[Dict]   AFTER deleteASwhile(select COUNT(*) from [Dict] where UpperId != 0 and UpperId not in (select Id from [Dict])) > 0BEGIN    delete from [Dict]     where UpperId != 0 and UpperId not in (select Id from [Dict])    END
复制代码

 

 存储过程

 现有用户表(User)

字段说明
Id标示
Name姓名
Age年龄
DeptId部门标示

部门表(Dept)

字段说明
Id标示
Name名称

需求一:用存储过程查询所有用户的信息(标示、姓名、年龄、部门名)

 //操作步骤:展开数据库,再展开可编程性,右击‘存储过程’,新建即可

复制代码
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[GetUsers]ASBEGIN        select [User].Id '标示',[User].Name '姓名', [User].Age '年龄', [Dept].Name '部门' from [User] left join [Dept] on [User].DeptId = [Dept].IdENDGO
复制代码
/* 调用 */exec GetUsers

需求二:用存储过程查询指定部门的用户信息(标示、姓名、年龄、部门名)

复制代码
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[GetUsersByDept](    @deptid int /* 部门标示 */    )ASBEGIN        select [User].Id '标示',[User].Name '姓名', [User].Age '年龄', [Dept].Name '部门'    from [User] left join [Dept] on [User].DeptId = [Dept].Id    where [Dept].Id = @deptidENDGO
复制代码
/* 调用 */exec GetUsersByDept 2

需求三:在项目中用ADO调用存储过程'GetUsersByDept'

1、环境:VS2010+sql2008

2、新建edmx文件,引用两张表和存储过程

 3、切换到‘模型浏览器’,‘添加函数导入’

 

4、在‘添加函数导入’面板,点击‘获取列信息’,获取到列信息后再点击‘创建新的复杂类型’,确定后就可以通过Func调用存储过程了

 5、调用代码Demo

            using (var context = new SqltestEntities())             {                var result = context.GetUsersByDept(2);                throw new Exception(result.Count().ToString());            }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表