`
zys08
  • 浏览: 145589 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

SQLServer创建表,插入数据,查询,创建触发器,存储过程

 
阅读更多

--建数据库
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();
}
}

分享到:
评论

相关推荐

    SQLSERVER触发器插入数据

    触发器是一种存储过程,它定义在特定的表上,并且在特定的事件(如插入、更新或删除操作)发生时自动执行。 #### 二、描述详解 描述中的代码片段展示了如何创建一个触发器`TT`,该触发器作用于`TSYS_BAMKZ`表上,...

    SQL server存储过程习题,SQL触发器习题.rar

    在SQL Server数据库管理系统中,存储过程和触发器是两种非常重要的数据库编程元素,它们对于数据库设计和数据管理具有深远的影响。下面将详细讲解这两个概念及其相关的知识点。 **SQL存储过程**: 1. **定义**:SQL...

    SQL Server数据库实验_存储过程与触发器设计.docx

    在SQL Server数据库中,存储过程和触发器是两种重要的数据库对象,它们在数据管理与业务逻辑处理中扮演着关键角色。 存储过程是预编译的SQL语句集合,它可以包含一系列的数据操作,如查询、更新、插入和删除等。...

    SQL Server常用操作触发器、存储过程.rar

    在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...

    SQL Server 利用触发器对多表视图进行更新的实现方法

    在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的...

    SQL Server中多行数据更新的触发器应用研究.pdf

    在该实例中,通过创建一个数据插入触发器,利用inserted表中的数据,与课程表进行内连接,从而生成新的成绩记录,并将这些记录插入成绩表中。这种方法自动填充数据,减少了手动操作的复杂性和出错的概率。 第二个...

    sql server触发器中自动生成的临时表

    SQL Server 触发器中自动生成的临时表 SQL Server 触发器是一种强大的工具,用于自动执行某些操作,以响应数据库中的变化。其中,系统自动生成的临时表是触发器中一个重要的组成部分。今天,我们将详细介绍 SQL ...

    SQLServer触发器实现不同服务器数据同步.pdf

    SQL Server 触发器实现不同...本文提供了一个使用 SQL Server 触发器实现不同服务器之间的数据同步的解决方案,涉及到了多个知识点,包括 SQL Server 触发器、分布式事务处理服务、链接服务器、存储过程和作业等。

    使用SQL Server触发器实现数据表的级联更新.pdf

    触发器可以被看作是一种特殊的存储过程,可以在数据库事件的触发下执行复杂的SQL语句,从而实现比约束更加复杂的数据完整性要求。 在SQL Server中,有两种触发器:DDL触发器和DML触发器。DDL触发器是被数据定义语句...

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    sqlserver 触发器学习(实现自动编号)

    在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...

    SQLserver08触发器

    一个简单的AFTER INSERT触发器,当向表中插入新数据时,自动更新另一个关联表: ```sql CREATE TRIGGER trg_AfterInsertExample ON Table1 AFTER INSERT AS BEGIN INSERT INTO Table2 (Column1) SELECT ...

    在SQLSERVER中通过存储过程和触发器创建主键生成器

    在这个存储过程中,我们首先声明了一个变量`@NewKey`,然后查询表中的最大主键值并加1,最后返回新的主键值。 接下来,触发器在数据库中扮演着事件响应者的角色,当特定的DML操作(INSERT, UPDATE, DELETE)发生时...

    SqlServer触发器写法案例

    触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者数据完整性。触发器对于维护数据库的一致性和安全性非常有用...

    sql server 2005学习笔记之触发器

    SQL Server 2005中的触发器是一种特殊类型的存储过程,它们在特定的T-SQL语句执行时自动触发,增强了数据库的逻辑控制能力。触发器主要分为两类:DML触发器和DDL触发器。 DML触发器是针对数据操纵语言(Data ...

    利用SQLServer触发器实现表跟踪.pdf

    本篇文章详细介绍了如何通过SQL Server触发器技术创建数据跟踪日志,确保数据安全,并提供了一个应用实例,即利用SQL Server 2000数据库触发器来实现对数据表变化的跟踪。 首先,触发器在数据表发生特定操作时自动...

    sql server触发器.rar

    - 可以使用`sp_helptext`存储过程查看触发器的定义,或者在SQL Server Management Studio (SSMS) 的“对象资源管理器”中进行管理。 5. **实例应用**: - 在一个示例中,我们可以创建一个INSERT触发器,确保每当...

    sqlserver触发器例子

    触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。通过这种方式,触发器能够帮助实现复杂的业务逻辑和数据完整性约束。 #### ...

    SQL 2005中存储过程和触发器调试大法.doc

    在SQL Server 2005中,存储过程和触发器的调试对于开发人员来说至关重要,尤其是在复杂的业务逻辑处理中,能够有效地定位问题所在,提高代码质量和开发效率。然而,与SQL Server 2000不同,SQL Server 2005不再直接...

Global site tag (gtag.js) - Google Analytics