`
虚弱的java
  • 浏览: 163388 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

Sql2008--函数,视图,存储过程

阅读更多

--创建用户自定义函数
--根据函数主体的定义方式,下列语句在函数内有效
--赋值语句
--TRY....CATCH语句以外的流控制语句
--定义局部数据变量和局部游标的DECLARE语句
--SELECT语句,其中的选择列包含为局部变量分配值的表达式
--游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标
--修改table局部变量的INSERT,UPDATE,DELETE语句
--调用扩展存储过程的EXECUTE语句
--语法
--create function ['用户定义函数所属架构的名字'.] ['函数名']
--([{@parameter_name [as] [type_schema_name.] parameter_data_type [=default] [readonly] }[,....]
--]
--)
--RETURNS TABLE
--[ WITH <function_option> [,....n]]
--[ as ]
--RETURN [(] SELECT_STMT[)]
--[;]

--创建示例
use AdventureWorks
go --首先判断该函数是否存在,如存在将其删除
if OBJECT_ID(N'Sales.ufn_SalesByStore',N'IF') is not null
drop function Sales.ufn_SalesByStore;
go --开始创建函数语句
CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int)
returns table
as
return --选择分组语句
(
select  P.ProductID,P.Name,sum(SD.LineTotal) as 'YTD Total'
from Production.Product as P
 JOIN Sales.SalesOrderDetail as SD ON SD.ProductID = P.ProductID
 JOIN Sales.SalesOrderHeader as SH ON SH.SalesOrderID = SD.SalesOrderID
 where SH.CustomerID = @storeid
 Group By P.ProductID,P.Name
);
go
--调用
select * from Sales.ufn_SalesByStore(602);
go

--视图:是一个虚拟表。生成视图的表被称为基表。当数据量过大时,使用视图可以避免并发操作。简化数据操作
--视图并不存储在数据库中
--存储过程:存储过程封装儿了多条语句
--在以下情况儿下使用存储过程儿:1、包含输入参数和输出参数,执行多个批处理语句 2、包含多条SQL语句,用来控制或操作数据库
--3、向调用程序返回状态值,以指示成功或失败。如果失败,给出失败的原因
--4、存储过程的优点儿:1、具有安全特性,2、存储过程可以强制应用程序的安全性,3、存储过程允许模块化程序设计,4、存储过程
--可以减少通信流量。
--5、存储过程的种类:1、用户定义的存储过程儿,2、扩展存储过程,3、系统存储过程
--6、创建存储过程步骤:1、所有输入参数和返回的输出参数,2、执行数据库操作的编程语句,3、返回至调用过程以标识成功或失败的状态值
------4、捕获和处理潜在的错误所需的任何错误处理语句

--创建存储过程儿
use AdventureWorks
go
create procedure dbo.sp_who --创建存储过程语句
as
 select FirstName,LastName from Person.Contact
go
exec sp_who;--执行存储过程语句
exec dbo.sp_who;--执行存储过程语句
go
drop procedure dbo.sp_who;--删除存储过程语句
go

use AdventureWorks
go
execute  HumanResources.uspGetEmployees  @FirstName=N'Diane',@LastName=N'Margheim';
go


--使用存储过程应注意的问题
--1、从存储过程儿返回给定参数的值
--2、处理执行存储过程时的错误
--3、给变量赋值要用select 或 set
--4、建立存储过程要用 as
--5、执行存储过程无反应 1、死循环,2、重复执行存储过程,3、表空间不够

--处理存储过程时的错误
--存储过程中使用try...catch语句
create procedure insert_SelectedLab   --存储过程名称为insert_SelectedLab
as
  begin try --Try部分开始
 insert into SelectedLab --向SelectedLab表中添加null值
 values(null ,null)
  end try --结束try部分
  begin catch
 --cast(@@error as nvarchar) 是将@@error 的值转换为字符型
   select '错误发生,错误号为'+CAST(@@ERROR as nvarchar)
  end catch
 


-------存储过程中的程序控制语句
---1、IF.....ELSE条件选择语句
declare @q int,@r int ,@s int --声明变量
select @q = 24,@r = 15,@s = 6*3 --为变量赋值
IF @q > @r
 print '判别结果为:q > r'  --输出结果
ELSE IF @r > @s
 PRINT '判别结果为: r>s'   --输出结果
ELSE
 PRINT '判别结果为: s>r'   --输出结果
 
 --BEGIN....END语句块
 --CASE语句
 use school
 update student
 set NAME=
 case
  when NAME='李勇' then '李小勇'
  when NAME='王敏' then '王小敏'
  else '菜小小'
 end
select s.BIRTHDAY,s.ID,s.NAME
from student s 
order by BIRTHDAY

--搜索CASE表达式
use school
go
update student
set BIRTHDAY =
 case 
  when BIRTHDAY<'1990-01-01' then '1990-01-01'
  when BIRTHDAY>'1990-01-01' and BIRTHDAY <'1990-06-01' then '1990-06-01'
  when BIRTHDAY>'1990-06-01' and BIRTHDAY<'1991-01-01' then '1991-01-01'
  else '1999-01-01'
 end
select s.ID,s.NAME,s.BIRTHDAY
from student s
order by BIRTHDAY

--WHILE循环语句

use school
select s.ID,s.NAME,s.BIRTHDAY
into student_temp
from student s

select * from student_temp
go

use school
while(select MAX(CAST(birthday as CHAR)) from student_temp)<'1995-01-01'
 begin
  update student_temp
  set birthday = DATEADD(YYYY,1,birthday)
  if(select MAX(CAST(birthday as CHAR)) from student_temp) >'1995-01-01'
  break --跳出循环
  else
  continue --继续循环
 end
select *
from student_temp

--触发器:触发器是一种特殊的存储过程,当在表(视图)中插入,更新,删除记录时,会触发一个或一系列T_SQL语句,也就是说
--对某一个表(视图)的操作会触发某种条件,从而执行的一段程序。
--1、存储过程是可以通过存储过程名称而被直接调用
--2、触发器则是通过事件触发搪行。
--作用:为数据库提供了有效的监控和处理,能够确保数据的完整性。
--触发器的类型:1、after触发器,2、instead of 触发器
--1、after 触发器:要求只有在执行某一操作(insert,update,delete)之后,触发器才被触发。适用于数据表
--2、instead of 触发器:表示并不执行其所定义的操作(insert,update,delete),而仅是执行触发本身,即不
-----去执行原来的SQL操作,而去运行触发器本身的SQL语句。
--触发器的工作原理
--每个触发器有两个特殊的表:插入表和删除表。这两个表是逻辑表,并且由系统管理的,它们存储在内存中,不是存储在数据库中,因此
--不允许用户直接对其修改。由于它们是动态驻留内存中的,当触发器工作完成后,这两个表也删除。这两个表主要保存因用户操作而被影
--响到的原数据值或新数据值
--插入(inserted)表和删除(deleted)表是存储在内存中,它是只读的用户不能修改这两个表中的数据

--1、添加数据--insert触发器:当触发insert触发器时,新的数据行会同时插入到建立触发器的表和inserted表。触发器通过检查inserted
----表来确定是否执行触发器动作
--2、修改数据--update触发器:修改数据时,需使用inserted和deleted表。当执行update触发器时,定义触发器的表会把原始行数据移入deleted
----表,更新的数据会移入inserted表,然后触发器会检查这两个表,并确定是否更新表。
--3、删除数据--delete触发器:触发delete触发器后,会将表中删除的数据放置到deleted表,触发器会检查deleted表来确定是否执行了触发器动作。

--创建触发器
create trigger trigger_StudentDetails --触发器名称
on StudentDetails  --在表studen上建立该触发器
after update --update触发器
as
begin
 if(select count(*) from Student,StudentDetails
  where StudentDetails.studid = Student.studid
 )=0
 print '错误'--显示信息:错误
 rollback tran --回滚该触发器
end

--使用触发器常见问题
--1、create trigger 必须是查询批次中的第一个语句:触发器规定:create trigger 语句必须是批处理中的第一个语句。
--2、返回错误信息的语句 RAISERROR({msg_id|msg_str}{,severity,state})
--3、raiserror('错误',16,1)

--触发器与约束的区别
--1、触发器可以实现数据的完整性,要确保数据的完整性。较为简单的完整性要求使用约束实现。复杂的使用触发器。
--而且触发器维护起来儿比较复杂。

--E-R图
--1、实体:客观存在并可相互区分的事物一般称为实体,用矩形表示
--2、属性:实体所具有的某一特性被称为属性,用椭圆形表示
--3、联系:实体与实体这间的关系:1对1,1对多,多对多,用菱形表示
--4、设计原则:先画出局部E-R图,再综合局部E-R图,产生出总体E-R图
--创建新的windows用户
--1、开始--运行  键入:%SystemRoot%\system32\compmgmt.msc /s 打开"计算机管理"程序
--使用REVOKE语句删除用户对存储过程的执行过程
--REVOKE EXECUTE ON PR_NAME FROM ZHAO;
--使用DROP语句删除存储过程,删除视图,删除表名
--DROP USER,LOGIN,PROC,VIEW

分享到:
评论

相关推荐

    SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

    SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则

    原创sql存储过程函数范例

    原创sql存储过程函数范例,一是为了自己方便查找,今天到公司因为没有我保存的一些范例,一个简单的例子写了半个小时,如果有范例直接套几分钟肯定搞定,所以索性上传到CSDN上,何时何地都能找到我的范例了。...

    sqlserver 存储过程,函数,视图实例

    在SQL Server数据库管理系统中,存储过程、函数和视图是三个重要的数据库对象,它们在数据库设计和数据操作中起着核心作用。以下是对这些概念的详细说明: **存储过程(Stored Procedure)** 存储过程是一组预编译...

    SQL存储过程,视图,函数,触发解密

    SQL存储过程、视图、函数和触发器是SQL中的核心概念,它们在数据库设计和应用程序开发中扮演着至关重要的角色。下面将详细介绍这些概念及其重要性。 1. **SQL存储过程**: 存储过程是一组预编译的SQL语句,存储在...

    SQL2000存储过程,视图,函数,触发解密.exe

    SQL2000存储过程,视图,函数,触发解密

    mysql基础-视图、存储函数、存储过程、触发器.pdf

    本文详细介绍了MySQL中的四个高级功能:视图、存储函数、存储过程和触发器。这些功能不仅能够增强数据库的性能,还能提高数据的安全性和一致性。通过合理地使用这些工具,可以有效地管理和优化数据库的应用程序。...

    oracle基础--表、视图、过程、函数、游标、异常

    本文将深入讲解Oracle中的几个核心概念:表、视图、过程、函数、游标以及异常处理,这些都是Oracle数据库管理的基础。 首先,我们来看“表”。在Oracle中,表是数据的基本存储单元,用于组织和存储相关数据。创建表...

    sqlserver 存储过程 函数 常用知识点

    在SQL Server中,存储过程和函数是数据库管理与开发中的重要组成部分,它们为数据库操作提供了高效、可重用和安全的途径。以下是关于SQL Server存储过程和函数的一些常用知识点: 1. **存储过程(Stored Procedures...

    sqldeveloper-19.2.1.247.2212-x64.zip

    - PL/SQL 开发:支持 PL/SQL 存储过程、函数和触发器的编写和调试。 - 数据库对象管理:包括表、视图、索引、序列、同义词、存储过程等的创建、修改和删除。 - 导入/导出数据:可以方便地导入和导出数据,支持...

    针对sqlserver 2008 存储过程通过With Encryption加密方式的解密

    存储过程解密的原理是基于 SQL Server 的系统视图 sys.sysobjvalues,该视图存储了存储过程、函数、触发器和视图等对象的元数据信息。其中,imageval 列存储了对象的加密信息。通过查询 sys.sysobjvalues 视图,我们...

    SQL脚本------存储过程分页示例

    本示例将深入探讨如何使用SQL脚本和存储过程来实现分页功能,这对于处理大数据集特别有用。 首先,我们需要了解存储过程。存储过程是预编译的SQL语句集合,它可以视为数据库中的一个可执行对象。通过创建存储过程,...

    sqlserver2005-SQL查询-SQL程序设计-存储设计-查询调整优化

    这部分内容涵盖了存储过程、触发器、函数以及动态SQL的使用。这些高级特性允许开发者将业务逻辑封装在数据库内,提高了代码复用性和执行效率。此外,还会涉及事务管理和并发控制,这对于保证数据的一致性和完整性至...

    sql学习-sql练习-SQL必知必会

    - **存储过程和触发器**:存储过程是一组预编译的SQL语句,可以封装业务逻辑并重复调用。触发器则是在特定事件(如INSERT、UPDATE或DELETE)发生时自动执行的SQL代码。 - **视图**:虚拟表,基于一个或多个表的查询...

    SQL学习教程-约束,索引,视图,函数

    在SQL(Structured Query Language)的学习过程中,约束、索引、视图和函数是数据库管理中的核心概念。这些组件不仅提升了数据存储的效率,也保证了数据的完整性和一致性。接下来,我们将深入探讨这些主题。 首先,...

    解密SQL SERVER 2005加密存储过程,视图、函数.sql

    解密SQL SERVER 2005加密存储过程,视图、函数.sql

    易飞系统触发器储存过程函数视图

    这些是平时个人兴趣爱好收集到的易飞ERP系统触发器/函数/储存过程/视图集。适合人群:系统管理员,运维专员或鼎捷顾问等

    标准SQL和transact-sql之比较学习

    Transact-SQL,作为SQL Server的方言,包含了所有标准SQL的功能,同时增加了许多额外的特性,如控制流程语句、异常处理、动态SQL、以及特定的函数和系统存储过程。T-SQL的控制流程语句包括BEGIN TRANSACTION、COMMIT...

    2024SQLServer解密存储过程、函数、视图、触发器工具

    在SQL Server中,存储过程、函数、视图和触发器是重要的数据库对象,它们对于数据处理和业务逻辑的实现起着至关重要的作用。然而,为了保护敏感数据和代码,有时我们会对这些对象进行加密,这就是"WITH ENCRYPTION...

    SQL Server创建存储过程、触发器、函数等(学习札记)

    SQL的存储过程、触发器等建立视图存储过程触发器函数(自定义函数)索引 视图  视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据...

    SQL储存过程等的解密,破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器

    在SQL Server 2000中,数据库对象如存储过程、函数、视图和触发器等,有时会被加密以保护其源代码不被查看或修改。这种加密是通过使用SQL Server的内置加密机制来实现的,它使得普通用户无法直接读取到这些对象的...

Global site tag (gtag.js) - Google Analytics