--建数据库
create database school
--建表
use school
create table students
(
s_id int identity(1,1) primary key,--设主键,为自增id
s_name varchar(20) not null,
s_classId int
)
create table class
(
c_id int identity(1,1) primary key,--设主键,为自增id
c_className varchar(20) not null
)
create table student_Score
(
ss_id int identity(1,1) primary key,--设主键,为自增id
ss_score varchar(200) not null,
s_id int
)
--设外键
use school
alter table students add constraint FK_class_studets foreign key(s_classId)references class(c_id)
--设外键
use school
alter table student_Score add constraint FK_students_student_Score foreign key(s_id)references students(s_id)
--插class数据
insert into class(c_className) values('08ACCP1班')
insert into class(c_className) values('08ACCP2班')
insert into class(c_className) values('08ACCP3班')
insert into class(c_className) values('08ACCP4班')
insert into class(c_className) values('08网编1班')
insert into class(c_className) values('08网编2班')
insert into class(c_className) values('08软开1班')
insert into class(c_className) values('08软开2班')
insert into class(c_className) values('08软开3班')
insert into class(c_className) values('08信管1班')
--插studets数据
insert into students(s_name,s_classId) values('陈志锦',2)
insert into students(s_name,s_classId) values('何金喜',4)
insert into students(s_name,s_classId) values('黄瑞驰',5)
--单表查询
--查studets表
select * from students
--查class表
select * from class
--多表查询
--内联接查询
--情况1:
select * from students as s,class as c where s.s_classId=c.c_id
--情况2:
select * from students as s inner join class as c on(s.s_classId=c.c_id)
--外联接查询
--左外联接
select * from students as s left outer join class as c on s.s_classId=c.c_id
select * from class as c left outer join students as s on s.s_classId=c.c_id
--右外联接
select * from students as s right outer join class as c on s.s_classId=c.c_id
select * from class as c right outer join students as s on s.s_classId=c.c_id
--全联接
select * from students as s full outer join class as c on s.s_classId=c.c_id
select * from class as c full outer join students as s on s.s_classId=c.c_id
--交叉查询
SELECT * FROM students CROSS JOIN class
SELECT * FROM class CROSS JOIN students
--触发器
/*-------触发器------*/
/*触发器是一种特殊的存储过程,
触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
触发器通常用于强制业务规则
触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束
可执行复杂的SQL语句(if/while/case)
可引用其它表中的列
*/
/*
DELETE 触发器
INSERT 触发器
UPDATE 触发器
*/
/*----------Insert 插入 触发器------------*/
Create Trigger Tri_insert
on students /*针对某个表,触发器是建立在表关系上的*/
for insert /*采用的是哪种触发器*/
as
declare @stu_id int;
declare @stu_score varchar(200);
select @stu_id=s_id from inserted /*这里的Inserted 是在创建触发器时候 系统自动创建的内存表*/
insert into student_Score(s_id,ss_score)values(@stu_id,'100')
go
--就是插一条数据进入students中,Tri_insert触发器就会自动在student_Score插入相关的学生的一条分数的数据
insert into students(s_name,s_classId) values('黄驰',6)
select * from student_Score
--存储过程
/*
存储过程
1.不带参数的存储过程
2.带参数的存储过程
*/
--不带参数的存储过程
create procedure pro_selStu
as
select * from students;
go
--下面是测试存储过程
execute pro_selStu;
--带参数的存储过程
/*(1)带输入参数的存储过程 */
Create procedure pro_stu @stu_id int
as
select * from students where s_id=@stu_id
go
--下面是测试存储过程
execute pro_stu 1;
/*(2)带输出参数的存储过程*/
Create procedure pro_stu_output @stu_sum int output,@stu_down_count int ,@stu_up_count int
as
select @stu_sum=count(*) from students where s_id between @stu_down_count and @stu_up_count
go
--下面是测试存储过程
declare @stu_sum int
execute pro_stu_output @stu_sum output ,1,4 /*在调用含有输出参数的存储过程时 要注意*/
print @stu_sum
带参数的存储过程在Java中的应用:
/**
create procedure ShipVia_Sum
@via int,
@sum money output
as
select @sum = sum(freight) from orders
where shipVia = @via
**/
public static void procedureOutput() {
try {
Connection conn = JDBC_ODBC.getConnection();
System.out.println( "conn is: " + conn);
String call = "{call ShipVia_Sum(?,?)} ";
CallableStatement cs = conn.prepareCall(call);
cs.setInt(1, 1);
cs.registerOutParameter(2, java.sql.Types.DOUBLE);
cs.execute();
System.out.println(cs.getDouble(2));
} catch (Exception ex) {
ex.printStackTrace();
}
}
分享到:
相关推荐
触发器是一种存储过程,它定义在特定的表上,并且在特定的事件(如插入、更新或删除操作)发生时自动执行。 #### 二、描述详解 描述中的代码片段展示了如何创建一个触发器`TT`,该触发器作用于`TSYS_BAMKZ`表上,...
在SQL Server数据库管理系统中,存储过程和触发器是两种非常重要的数据库编程元素,它们对于数据库设计和数据管理具有深远的影响。下面将详细讲解这两个概念及其相关的知识点。 **SQL存储过程**: 1. **定义**:SQL...
在SQL Server数据库中,存储过程和触发器是两种重要的数据库对象,它们在数据管理与业务逻辑处理中扮演着关键角色。 存储过程是预编译的SQL语句集合,它可以包含一系列的数据操作,如查询、更新、插入和删除等。...
在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...
在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的...
在该实例中,通过创建一个数据插入触发器,利用inserted表中的数据,与课程表进行内连接,从而生成新的成绩记录,并将这些记录插入成绩表中。这种方法自动填充数据,减少了手动操作的复杂性和出错的概率。 第二个...
SQL Server 触发器中自动生成的临时表 SQL Server 触发器是一种强大的工具,用于自动执行某些操作,以响应数据库中的变化。其中,系统自动生成的临时表是触发器中一个重要的组成部分。今天,我们将详细介绍 SQL ...
SQL Server 触发器实现不同...本文提供了一个使用 SQL Server 触发器实现不同服务器之间的数据同步的解决方案,涉及到了多个知识点,包括 SQL Server 触发器、分布式事务处理服务、链接服务器、存储过程和作业等。
触发器可以被看作是一种特殊的存储过程,可以在数据库事件的触发下执行复杂的SQL语句,从而实现比约束更加复杂的数据完整性要求。 在SQL Server中,有两种触发器:DDL触发器和DML触发器。DDL触发器是被数据定义语句...
### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
一个简单的AFTER INSERT触发器,当向表中插入新数据时,自动更新另一个关联表: ```sql CREATE TRIGGER trg_AfterInsertExample ON Table1 AFTER INSERT AS BEGIN INSERT INTO Table2 (Column1) SELECT ...
在这个存储过程中,我们首先声明了一个变量`@NewKey`,然后查询表中的最大主键值并加1,最后返回新的主键值。 接下来,触发器在数据库中扮演着事件响应者的角色,当特定的DML操作(INSERT, UPDATE, DELETE)发生时...
触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者数据完整性。触发器对于维护数据库的一致性和安全性非常有用...
SQL Server 2005中的触发器是一种特殊类型的存储过程,它们在特定的T-SQL语句执行时自动触发,增强了数据库的逻辑控制能力。触发器主要分为两类:DML触发器和DDL触发器。 DML触发器是针对数据操纵语言(Data ...
本篇文章详细介绍了如何通过SQL Server触发器技术创建数据跟踪日志,确保数据安全,并提供了一个应用实例,即利用SQL Server 2000数据库触发器来实现对数据表变化的跟踪。 首先,触发器在数据表发生特定操作时自动...
- 可以使用`sp_helptext`存储过程查看触发器的定义,或者在SQL Server Management Studio (SSMS) 的“对象资源管理器”中进行管理。 5. **实例应用**: - 在一个示例中,我们可以创建一个INSERT触发器,确保每当...
触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。通过这种方式,触发器能够帮助实现复杂的业务逻辑和数据完整性约束。 #### ...
在SQL Server 2005中,存储过程和触发器的调试对于开发人员来说至关重要,尤其是在复杂的业务逻辑处理中,能够有效地定位问题所在,提高代码质量和开发效率。然而,与SQL Server 2000不同,SQL Server 2005不再直接...