《深入分析sqlserver查询计划》由会员分享,可在线阅读,更多相关《深入分析sqlserver查询计划(7页珍藏版)》请在金锄头文库上搜索。
1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解深入分析SqlServer查询计划一、自定义函数:1. 可以返回表变量2. 限制颇多,包括不能使用output参数;不能用临时表;函数内部的操作不能影响到外部环境;不能通过select返回结果集;不能update,delete,数据库表;3. 必须return 一个标量值或表变量自定义函数一般用在复用度高,功能简单单一,争对性强的地方。二、存储过程1. 不能返回表变量2. 限制少,可以执行对数据库表的操作,可以返回数据集3. 可以return一个标量值,也
2、可以省略return存储过程一般用在实现复杂的功能,数据操纵方面。=SqlServer存储过程-实例实例1:只返回单一记录集的存储过程。表银行存款表(bankMoney)的内容如下IduserIDSexMoney001Zhangsan男30002Wangwu男50003Zhangsan男40要求1:查询表bankMoney的内容的存储过程?12345 create procedure sp_query_bankMoney asselect * from bankMoney go exec sp_query_bankMoney注* 在使用过程中只需要把T-Sql中的SQL语句替换为存储过程名,就
3、可以了很方便吧!实例2(向存储过程中传递参数):加入一笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总金额。?1112 Create proc insert_bank param1 char(10),param2 varchar(20),param3 varchar(20),param4 int,param5 int outputwith encryption -加密 asinsert into bankMoney (id,userID,sex,Money) Values(param1,param2,param3, param4) select para
4、m5=sum(Money) from bankMoney where userID=Zhangsango 在SQL Server查询分析器中执行该存储过程的方法是: declare total_price intexec insert_bank 004,Zhangsan,男,100,total_price outputprint 总余额为+convert(varchar,total_price) go在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):1.以Return传回整数2.以output格式传回参数3.Recordset传回值的区别:output和re
5、turn都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。实例3:使用带有复杂 SELECT 语句的简单过程下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。? USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = au_info_all AND type = P) DROP PROCEDURE au_info_all GO CREATE PROCEDURE au_info_all ASSELECT au_lname, au_fname, tit
6、le, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id GO au_info_all 存储过程可以通过以下方法执行: EXECUTE au_info_all - Or EXEC au_info_all 如果该过程是批处理中的第一条语句,则可使用: au_info_all实例4:使用带有参数的简单过程? CREAT
7、E PROCEDURE au_info lastname varchar(40), firstname varchar(20) ASSELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname = firstname AND au
8、_lname = lastname GO au_info 存储过程可以通过以下方法执行: EXECUTE au_info Dull, Ann- Or EXECUTE au_info lastname = Dull, firstname = Ann- Or EXECUTE au_info firstname = Ann, lastname = Dull- Or EXEC au_info Dull, Ann- Or EXEC au_info lastname = Dull, firstname = Ann- Or EXEC au_info firstname = Ann, lastname = D
9、ull如果该过程是批处理中的第一条语句,则可使用: au_info Dull, Ann- Or au_info lastname = Dull, firstname = Ann- Or au_info firstname = Ann, lastname = Dull实例5:使用带有通配符参数的简单过程? CREATE PROCEDURE au_info2 lastname varchar(30) = D%, firstname varchar(18) = %ASSELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOI
10、N titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname LIKE firstname AND au_lname LIKE lastname GO au_info2 存储过程可以用多种组合执行。下面只列出了部分组合: EXECUTE au_info2 - Or EXECUTE au_info2 Wh%- Or EXECUTE au_info2 firstna
11、me = A%- Or EXECUTE au_info2 CKarsOEn- Or EXECUTE au_info2 Hunter, Sheryl- Or EXECUTE au_info2 H%, S%= proc2实例6:if.else存储过程,其中case作为执行update的选择依据,用if.else实现执行时根据传入的参数执行不同的修改.?55 -下面是ifelse的存储过程: if exists (select 1 from sysobjects where name = Student and type =u ) drop table Student go if exists (s
12、elect 1 from sysobjects where name = spUpdateStudent and type =p ) drop proc spUpdateStudent go create table Student ( fName nvarchar (10), fAge smallint , fDiqu varchar (50), fTel int) go insert into Student values (X.X.Y , 28, Tesing , ) go create proc spUpdateStudent ( fCase int , fName nvarchar
13、(10), fAge smallint , fDiqu varchar (50), fTel int) asupdate Student set fAge = fAge, - 传 1,2,3 都要更新 fAge 不需要用 case fDiqu = (case when fCase = 2 or fCase = 3 then fDiqu else fDiqu end ), fTel = (case when fCase = 3 then fTel else fTel end ) where fName = fName select * from Student go - 只改 Age exec
14、spUpdateStudent fCase = 1, fName = NX.X.Y , fAge = 80, fDiqu = NUpdate , fTel = - 改 Age 和 Diqu exec spUpdateStudent fCase = 2, fName = NX.X.Y , fAge = 80, fDiqu = NUpdate , fTel = - 全改 exec spUpdateStudent fCase = 3, fName = NX.X.Y , fAge = 80, fDiqu = NUpdate , fTel = 对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表