在SQL Server数据库中 存储过程是什么,希望给点例题
发布时间:2025-05-14 16:48:05 发布人:远客网络
一、在SQL Server数据库中 存储过程是什么,希望给点例题
1、存储过程不仅sqlserver里有、其他dbms也有、只是语法有小出入。
2、存储过程是一段存储在系统中可随时使用的可带参数的SQL执行语句或程序段。
3、使用存储过程可以避免重复的填写SQL语句、可以快速的得到符合条件的某段SQL语句的执行结果。
4、例子(MSSQL):比如想实现一个表a(aid int,atime datetime)输入aid的值得到对应的atime的值
5、create proc proc_test//创建过程
6、@aid int//定义一个参数(默认为in参数)
7、declare@atime datetime//定义一个变量用于接收返回值(游标在这里定义)
8、select@atime=atime from a where aid=@aid//select@xxx=xxx from是给变量赋值、也是sql语句的符合条件值
9、print@atime//print方法输出显示变量
10、exec proc_test a表中aid的任意一个值
11、以后想实现通过输入aid(或者其他列)的值得到atime(或者其他列)的值、就不用一遍一遍的写sql语句
12、这只是一个简单的应用。如果SQL语句是复杂语句、不是就省事多了?
13、这个例子只能返回一条记录、如果想返回多条、需要用游标。
14、这里暂时只给你简单应用、你先理解下。
二、MS sql如何使用存储过程
T-SQl和C语言一样,是一门结构化的语言。
存储过程是SQL查询语句与控制流程语句的预编译集合,并以特定的名称保存在数据库中。存储过程也是数据库对象
SQl server的系统存储过程保存在master数据库中,且所有命名的系统存储过程命名以“Sp_”开头。在master数据库中,
select count([name])as'系统存储数量' from sysobjects
where [name] like'sp_%'
EXECUTE用来表示调用存储过程,也可以缩写为EXEC,
EXECUTE‘存储过程名’‘参数’---如果没有参数则省略参数
EXEC sp_databases列出当前系统中的数据库
EXEC sp_renamedb'Northwind','Northwind1'修改数据库的名称(单用户访问)
USE stuDB GO EXEC sp_tables返回某个表列的信息
EXEC sp_columns查看指定列的信息
EXEC sp_help查看某个表的所有信息
EXEC sp_helpconstraint'表名'查看某个表的约束
EXEC sp_helpdb'数据库名'或 EXEC sp_helpdb查看指定数据库或所有数据库信息
EXEC sp_helptext'对象名称'显示数据库对象(存储过程、触发器、试图)的定义文本
EXEC sp_helpindex'表名'查看指定表的索引信息
EXEC sp_renamedb'原名称','新名称'更改数据库名称
EXEC sp_stored_procedures列出当前环境可用的所有存储过程
除了系统存储过程,SQL Server还提供以Xp_开头的扩展存储过程,如可以调用DOS命名的,XP_cmdshell存储过程
EXEC Xp_cmdshell DOS命名 [NO_OUTPUT]
NO_OUTPUT为可选参数,表示是否输入存储过程返回的信息
@参数1名数据类型 [=默认值] [参数类型(输入/输出)]
@参数n名数据类型 [=默认值] [参数类型(输入/输出)]
参数类型分为输入参数和输出参数,默认为输入参数,使用OUTPUT表示输出参数。创建存储过程最好以proc开头
if object_id('proc_student','procedure') is not null
select pcid as'电脑编号',
end as'使用状态' from pc
execute proc_student select* from pc
if object_id('proc_stu','procedure') is not null
select pcid as'电脑编号',
end as'使用状态' from pc where pcuse=@pcuse end;
if OBJECT_ID('proc_s','procedure') is not null
select@pcus=pcuse from pc where pcid=@pcid end;
declare@pcus int execute proc_s 5,@pcus output
当存储过程的语句十分复杂时,可以在存储过程中加入错误语言。SQL Server中可以使用RAISERROR返回用户自定义的错误信息。
RAISERROR(自定义的错误信息,错误的严重级别,错误状态)
自定义错误信息:表示输出信息:表示输出的错误提示文本
错误的严重级别:表示用户自定义错误的严重性级别。(0-18极)
错误的状态:表示自定义错误的状态,值的范围在1-127
三、SQL Server的存储过程怎么写
create table books_test( book_id int identity(1,1) primary key,
book_name varchar(20),book_price float,book_auth varchar(10));
insert into books_test(book_name,book_price,book_auth)values
('论语',25.6,'孔子'),
('天龙八部',25.6,'金庸'),
('雪山飞狐',32.7,'金庸'),
('平凡的世界',35.8,'路遥'),
('史记',54.8,'司马迁');
if(exists(select* from sys.objects where name='getAllBooks'))
select book_name from books_test;
sp_rename getallbooks,proc_get_allbooks;
if(exists(select* from sys.objects where name='searchbooks'))
执行存储searchbooks得到如下结果:
create procedure searchbooks(@bookid int)--括号里面是
declare@book_id int;定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
select* from books_test where book_id=@book_id;
执行存储searchbooks得到如下结果:
if(exists(select* from sys.objects where name='book_test2'))
执行存储book_test2得到如下结果:
(@bookid int,@bookname varchar(20))括号里面是
定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
declare@book_name varchar(20);
select* from books_test where book_id=
@book_id and book_name=@book_name;
SQL Server中查询存储命令子句:
Use是跳转到哪个数据库,对这个数据库进行操作。
GO向 SQL Server实用工具发出一批 Transact-SQL语句结束的信号,相当于提交上面的SQL语句。
(一步成功了才会执行下一步,即一步一个GO)
/****** Object: StoredProcedure [dbo].[PROC_four_five_hr]
Script Date: 07/30/2018 13:44:55******/
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ON