在SQL server中如何写存储过程

总结一下SQL server中如何存储。

USE [SSQADM]  
----Use 是跳转到哪个数据库,对这个数据库进行操作。
GO       
----GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL语句。
----GO是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个GO)
/****** Object:  StoredProcedure [dbo].[PROC_four_five_hr]    Script Date: 07/30/2018 13:44:55 ******/
----这一段是介绍本存储过程名字和创建时间
----/*  */   是注释掉很多行内容的符号
----object 对象 的意思
----storeprocedure  存储过程 的意思
----dbo 是每个数据库的默认用户,具有所有者权限
----dbo后面是存储过程的名称
----script date 脚本 创建时间
SET ANSI_NULLS ON
GO
----
SET QUOTED_IDENTIFIER ON
GO
----

/*首先准备数据,测试存储过程
use ssqadm;

--创建测试books表
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,‘司马迁‘);

select * from books_test;

*/
   
   --1.创建无参存储过程
if (exists (select * from sys.objects where name = ‘getAllBooks‘))
    drop proc getAllBooks
go
create procedure getAllBooks
as
begin
select * from books_test;
--调用,执行存储过程
exec getAllBooks;
end
go
--2、修改存储过程

alter procedure getallbooks
as 
select book_name from books_test;

--3、删除存储过程
drop procedure getallbooks;

go
--4、修改存储过程的名称
sp_rename getallbooks,proc_get_allbooks;

go
exec proc_get_allbooks;
go

--5、创建带参数的存储过程

use ssqadm
 go
if (exists (select * from sys.objects where name = ‘searchbooks‘))
drop proc searchbooks
-- exec searchbooks  1;--执行存储searchbooks得到如下结果:
go
create procedure searchbooks (@bookid int)--括号里面是
as 
begin
declare  @book_id int;----定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
set @book_id = @bookid;
select* from books_test where book_id = @book_id;
end;
go
-- exec searchbooks  1;--执行存储searchbooks得到如下结果:

--6、创建带两个参数的存储过程

use ssqadm
 go
if (exists (select * from sys.objects where name = ‘book_test2‘))
drop proc book_test2
-- exec book_test2  1;--执行存储book_test2得到如下结果:
go
create procedure book_test2 (@bookid int,@bookname varchar(20))--括号里面是
as 
begin
declare  @book_id int;----定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
declare  @book_name varchar(20);
set @book_id = @bookid;
set @book_name = @bookname;
select* from books_test where book_id = @book_id and book_name = @book_name;
end;
go
-- exec book_test2  1,‘论语‘;--执行存储book_test2得到如下结果:

--7、创建带有返回值的存储过程
use ssqadm
go
if (exists (select * from sys.objects where name = ‘book_test3‘))
drop proc book_test3

go
create procedure book_test3(@bookid int,@out_book_name varchar(20) output)
as
declare @book_id  int;
set @book_id = @bookid;

begin
select @out_book_name = book_name from books_test where book_id= @book_id;
end
go

-- --执行存储book_test2得到如下结果:
--执行存储过程
declare @out_name varchar(20) --声明一个变量用来接收执行存储过程后的返回值
exec book_test3 1,@out_name output
select @out_name as out_book_name;--as是给返回的列值起一个名字

原文地址:https://www.cnblogs.com/jiangyunfeng/p/12154681.html

时间: 2024-08-10 03:33:41

在SQL server中如何写存储过程的相关文章

SQL Server中存储过程 比 直接运行SQL语句慢的原因

问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2. 经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete时),可将此复杂操作用

SQL Server中存储过程比直接运行SQL语句慢的原因

原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.       经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query

SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR,所以一直没有尝试.最近因为项目的原因,在这方面做了一个调研,现在在这里分享一下心得. 首先要说明的是要在SQL Server中启用CLR必须是在SQL Server2005及以上版本,其次在默认情况下是

SQL Server中对存储过程的理解

数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL的相关语句即可,创建存储过程,就像函数一样,可以有参,也可以无参,无参的时候写起来很简单: CREATE PROC hello AS BEGIN /*....*/ END GO 执行的时候也是,只需要在自定义存储过程执行即可 EXEC hello 有参的时候写法也不陌生: CREATE PROC h

Sql server中根据存储过程中的部分信息查找存储过程名称的方法【视图和Function】

1.查询的语句: select a.id,b.name,a.*,b.* from syscomments a join sysobjects b on a.id=b.id where b.xtype='P' and a.text like '%usp_cm%' b.xtype='P'指定在什么类型的范围进行搜索 '%usp_cm%'就是你能记得的存储过程中的内容. 2.查找类型: select distinct xtype from sysobjects 找到数据库中所有的对象类型 P是存储过程

SQL Server中带事务的存储过程简单举例

先来看一个概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行.那么在存储过程里添加事务,则可以保证该事务里的所有sql代码要么完全执行要么完全不执行. 举个简单的带事务的存储过程: Begin Set NOCOUNT ON; --不返回影响行数 Set XACT_ABORT ON; --使用存储过程执行事务需要开启XACT_ABORT参数(默认为OFF) delete from table1 where n

十步优化SQL Server中的数据访问(转载)

原文地址:http://tech.it168.com/a2009/1125/814/000000814758.shtml 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因. 经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表

SQL Server中关于跟踪(Trace)那点事

前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简单的举几个应用场景: 在线生产库为何突然宕机?数百张数据表为何不翼而飞?刚打好补丁的系统为何屡遭黑手?新添加的信息表为何频频丢失?某张表字段的突然更改,究竟为何人所为?这些个匿名的访问背后,究竟是人是鬼?突然增加的增量数据,究竟是对是错?数百兆的日志爆炸式的增长背后又隐藏着什么?这一且的背后,是应用

SQL Server中的事务与锁

了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁:是数据库性能的重量级杀手之一,而死锁却是不同事务之间抢占数据资源造成的. 不懂的听上去,挺神奇的,懂的感觉我在扯淡,下面带你好好领略下他们的风采,嗅査下他们的狂骚.. 先说事务--概念,分类 用华仔无间道中的一句来给你诠释下:去不了终点,回到原点. 举例说明: 在一个事务中,你写啦2条sql语句,一