存储过程

王朝学院·作者佚名  2016-08-28  
宽屏版  字体: 小 | 中 | 大 | 超大  

触发器现有字典表(Dict)

字段

说明

Id

标示

ItemKey

键

ItemValue

值

UpperId

上层标示

需求一:当新增一条记录的时候,若已存在相同键的,拒绝插入//操作步骤:展开相关表,右击‘触发器’,新建即可

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

USE [sqlffwj]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [dbo].[CheckKeyRepeated]

ON [dbo].[Dict]

for INSERT

AS

if(select COUNT(*) from [Dict], inserted inobj where [Dict].ItemKey = inobj.ItemKey and [Dict].Id != inobj.Id) > 0

BEGIN

raiserror('已有相同键,不能插入',16,1)

rollback tran

END

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

需求二:当删除一条记录的时候,若有下层记录,拒绝删除[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

USE [sqlffwj]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [dbo].[CheckDependence]

ON [dbo].[Dict]

for delete

AS

if(select COUNT(*) from [Dict], deleted delbj where [Dict].UpperId = delbj.Id) > 0

BEGIN

raiserror('有下层记录,不能删除',16,1)

rollback tran

END

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

需求三:当删除一条记录的时候,若有下层记录,下层也一起删除[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

USE [sqlffwj]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [dbo].[CheckDependence2]

ON [dbo].[Dict]

AFTER delete

AS

while(select COUNT(*) from [Dict] where UpperId != 0 and UpperId not in (select Id from [Dict])) > 0

BEGIN

delete from [Dict]

where UpperId != 0 and UpperId not in (select Id from [Dict])

END

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

存储过程 现有用户表(User)

字段

说明

Id

标示

Name

姓名

Age

年龄

DeptId

部门标示

部门表(Dept)

字段

说明

Id

标示

Name

名称

需求一:用存储过程查询所有用户的信息(标示、姓名、年龄、部门名) //操作步骤:展开数据库,再展开可编程性,右击‘存储过程’,新建即可

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATEPROCEDURE [dbo].[GetUsers]

AS

BEGIN

select [User].Id '标示',[User].Name '姓名', [User].Age '年龄', [Dept].Name '部门' from [User] left join [Dept] on [User].DeptId = [Dept].Id

END

GO

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

/* 调用 */

exec GetUsers

需求二:用存储过程查询指定部门的用户信息(标示、姓名、年龄、部门名)[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[GetUsersByDept]

(

@deptid int /* 部门标示 */

)

AS

BEGIN

select [User].Id '标示',[User].Name '姓名', [User].Age '年龄', [Dept].Name '部门'

from [User] left join [Dept] on [User].DeptId = [Dept].Id

where [Dept].Id = @deptid

END

GO

[flash=500,400]http://s1.knowsky.com/20160211/yt345x1z1p432.gif[/flash]

/* 调用 */

exec GetUsersByDept 2

需求三:在项目中用ADO调用存储过程'GetUsersByDept'1、环境:VS2010+sql2008

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

[flash=500,400]http://s1.knowsky.com/20160211/towjgskv0t532.jpg[/flash]

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

[flash=500,400]http://s1.knowsky.com/20160211/bbjcr0kbkvu32.jpg[/flash]

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

[flash=500,400]http://s1.knowsky.com/20160211/knnsdc21lvm33.jpg[/flash]

5、调用代码Demo

using (var context = new SqltestEntities())

{

var result = context.GetUsersByDept(2);

throw new Exception(result.Count().ToString());

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有