创建简单的存储过程 编写 如何编写存储过程

如何编写存储过程

//创建存储过程

CREATE PROCEDURE userData(

IN id INT

)

BEGIN

SELECT * from userdata WHERE userflag = id;

END;

其中IN是传进去的变量;

drop procedure userData;//销毁这个存储过程。

call userData(2) //调用存储过程。

扩展资料:

sql中的存储过程及相关介绍:

CREATE PROCEDURE

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

]

AS 程序行

其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数

(SQL Server 7.0以上版本),参数的使用方法如下:

@参数名数据类型。

每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数。

同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。

参考资料来源:百度百科-储存过程


如何创建存储过程

oracle or sqlserver???
给你个oracle的,sqlserver的已经有人回复了。
CREATE OR REPLACE PROCEDURE pro_sb –创建过程名
( v_name) –参数“姓名”
as
v_card varchar2(20);–定义变量借书证号
v_bookcard varchar2(20); –变量:书号
v_bookname varchar2(20); –变量:书名
v_begindate DateTime; –借书时间
v_enddate DateTime; –还书时间
begin
select ’借书证号’ into v_card from card where ’姓名’=v_name; –从card表中查出借书证号
select ’书号’,’借书时间’,’还书时间’ into v_bookcard,v_begindate,v_enddate from borrow where ’书号’=v_card;
–从borrow表中根据借书证号查询书号\借书时间、还书时间
select ’书名’ into v_bookname from book where ’书号’ =v_card;–根据书号查书名
select v_card ,v_bookname,v_begindate,v_enddate from dual;–返回值,返回借书证号,书名,借书时间,还书时间
end;

使用SQL语句创建存储过程

使用SQL语句创建存储的具体过程如下:

1、首先,打开企业管理器,选择【工具】-【查询分析器】:

2、然后,输入SQL语句。如下:

CREATE PROCEDURE byroyalty1 @percentage int

AS

select au_id from titleauthor

where titleauthor.royaltyper = @percentage

GO

3、然后,点击确定之后,命令就会自动添加进查询中:

4、然后执行一下刚输入的命令:

5、最后,就可以在弹出的小窗口中查看存储过程了:

数据库存储过程如何创建

工具/材料

SQL SERVER 2014

  • 01

    首先我们先来看一下如下图所示的Customers表结构,接下来要创建的存储过程会操作这个表

  • 02

    我们点击数据库下面的可编程性选项,右键单击它下面的存储过程,选择新建存储过程选项,如下图所示

  • 03

    在弹出的新建存储过程界面,我们利用create procedure语句新建一个存储过程,它接收一个参数,然后返回Customers表中CustomerName包含这个参数的记录,如下图所示

  • 04

    最后,建好了存储过程以后,你就可以在存储过程列表中看到你建的存储过程名字了,如下图所示

如何编写存储过程

设计存储过程
几乎任何可写成批处理的 Transact-SQL 代码都可用于创建存储过程。
存储过程的设计规则
存储过程的设计规则包括:
CREATE PROCEDURE 定义本身可包括除下列 CREATE 语句以外的任何数量和类型的 SQL 语句,存储过程中的任意地方都不能使用下列语句: CREATE DEFAULT CREATE TRIGGER
CREATE PROCEDURE CREATE VIEW
CREATE RULE
可在存储过程中创建其它数据库对象。可以引用在同一存储过程中创建的对象,前提是在创建对象后再引用对象。
可以在存储过程内引用临时表。
如果在存储过程内创建本地临时表,则该临时表仅为该存储过程而存在;退出该存储过程后,临时表即会消失。
如果执行调用其它存储过程的存储过程,那么被调用存储过程可以访问由第一个存储过程创建的、包括临时表在内的所有对象。
如果执行在远程 Microsoft® SQL Server™ 2000 实例上进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理。
存储过程中参数的最大数目为 2100。
存储过程中局部变量的最大数目仅受可用内存的限制。
根据可用内存的不同,存储过程的最大大小可达 128 MB。
有关创建存储过程的规则的更多信息,请参见 CREATE PROCEDURE。
限定存储过程内的名称
在存储过程内部,如果用于诸如 SELECT 或 INSERT 这样的语句的对象名没有限定用户,那么用户将默认为该存储过程的所有者。在存储过程内部,如果创建存储过程的用户没有限定 SELECT、INSERT、UPDATE 或 DELETE 语句中引用的表名,那么通过该存储过程对这些表进行的访问将默认地受到该过程的创建者权限的限制。
如果有其他用户要使用存储过程,则用于语句 ALTER TABLE、CREATE TABLE、DROP TABLE、TRUNCATE TABLE、CREATE INDEX、DROP INDEX、UPDATE STATISTICS 和 DBCC 的对象名必须用该对象所有者的名称限定。例如,Mary 拥有表 marytab,如果她希望其他用户能够执行使用该表的存储过程,必须在该表用于上述某一条语句时对其表名进行限定。
此规则是必需的,因为运行存储过程时将解析对象的名称。如果未限定 marytab,而 John 试图执行该过程,SQL Server 将查找 John 所拥有的名为 marytab 的表。
加密过程定义
如果要创建存储过程,并且希望确保其他用户无法查看该过程的定义,那么可以使用 WITH ENCRYPTION 子句。这样,过程定义将以不可读的形式存储。
存储过程一旦加密其定义即无法解密,任何人(包括存储过程的所有者或系统管理员)都将无法查看存储过程定义。
SET 语句选项
当 ODBC 应用程序与 SQL Server 连接时,服务器将自动设置会话的下列选项:
SET QUOTED_IDENTIFIER ON
SET TEXTSIZE 2147483647
SET ANSI_DEFAULTS ON
SET CURSOR_CLOSE_ON_COMMIT OFF
SET IMPLICIT_TRANSACTIONS OFF
这些设置将提高 ODBC 应用程序的可移植性。由于基于 DB-Library 的应用程序通常不设置这些选项,所以应在上述所列 SET 选项打开和关闭的情况下都对存储过程进行测试。这样可确保存储过程始终能正确工作,而不管特定的连接在唤醒调用该存储过程时可能设置的选项。需要特别设置其中一个选项的存储过程,应在开始该存储过程时发出一条 SET 语句。此 SET 语句将只对该存储过程的执行保持有效,当该存储过程结束时,将恢复原设置。
示例
A. 创建使用参数的存储过程
下例创建一个在 pubs 数据库中很有用的存储过程。给出一个作者的姓和名,该存储过程将显示该作者的每本书的标题和出版商。
CREATE PROC au_info @lastname varchar(40), @firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
JOIN titles ON titleauthor.title_id = titles.title_id
JOIN publishers ON titles.pub_id = publishers.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
将出现一条说明该命令未返回任何数据也未返回任何行的消息,这表示已创建该存储过程。
现在执行 au_info 存储过程:
EXECUTE au_info Ringer, Anne
GO
下面是结果集:
au_lname au_fname title pub_name
——— ——— ——————— —————-
Ringer Anne The Gourmet Microwave Binnet & Hardley
Ringer Anne Is Anger the Enemy? New Moon Books
(2 row(s) affected)
B. 创建使用参数默认值的存储过程
下例创建一个存储过程 pub_info2,该存储过程显示作为参数给出的出版商所出版的某本书的作者姓名。如果未提供出版商的名称,该存储过程将显示由 Algodata Infosystems 出版的书籍的作者。
CREATE PROC pub_info2 @pubname varchar(40) = ’Algodata Infosystems’
AS
SELECT au_lname, au_fname, pub_name
FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id
JOIN titles t ON ta.title_id = t.title_id
JOIN publishers p ON t.pub_id = p.pub_id
WHERE @pubname = p.pub_name
执行未指定参数的 pub_info2:
EXECUTE pub_info2
GO
下面是结果集:
au_lname au_fname pub_name
—————- —————- ——————–
Green Marjorie Algodata Infosystems
Bennet Abraham Algodata Infosystems
O’Leary Michael Algodata Infosystems
MacFeather Stearns Algodata Infosystems
Straight Dean Algodata Infosystems
Carson Cheryl Algodata Infosystems
Dull Ann Algodata Infosystems
Hunter Sheryl Algodata Infosystems
Locksley Charlene Algodata Infosystems
(9 row(s) affected)
C. 执行用显式值替代参数默认值的存储过程
在下例中,存储过程 showind2 的 @table 参数默认值是 titles。
CREATE PROC showind2 @table varchar(30) = ’titles’
AS
SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects ON sysobjects.id = sysindexes.id
WHERE sysobjects.name = @table
列标题(例如,TABLE_NAME)可使结果更具可读性。下面是该存储过程显示的 authors 表的情况:
EXECUTE showind2 authors
GO
TABLE_NAME INDEX_NAME INDEX_ID
———- ———- ———-
authors UPKCL_auidind 1
authors aunmind 2
(2 row(s) affected)
如果用户未提供值,则 SQL Server 将使用默认表 titles:
EXECUTE showind2
GO
下面是结果集:
TABLE_NAME INDEX_NAME INDEX_ID
———- ———- ———-
titles UPKCL_titleidind 1
titles titleind 2
(2 row(s) affected)
D. 使用参数默认值 NULL 创建存储过程
参数默认值可以是 NULL 值。在这种情况下,如果未提供参数,则 SQL Server 将根据存储过程的其它语句执行存储过程。不会显示错误信息。
过程定义还可指定当不给出参数时要采取的其它某种措施。例如:
CREATE PROC showind3 @table varchar(30) = NULL
AS IF @table IS NULL
PRINT ’Give a table name’
ELSE
SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects
ON sysobjects.id = sysindexes.id
WHERE sysobjects.name = @table
E. 使用包含通配符的参数默认值创建存储过程
如果存储过程将参数用于 LIKE 关键字,那么默认值可包括通配符(%、_、)。例如,可将 showind 修改为当不提供参数时显示有关系统表的信息:
CREATE PROC showind4 @table varchar(30) = ’sys%’
AS SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects
ON sysobjects.id = sysindexes.id
WHERE sysobjects.name LIKE @table
在存储过程 au_info 的下列变化形式中,两个参数都有带通配符的默认值:
CREATE PROC au_info2 @lastname varchar(30) = ’D%’,
@firstname varchar(18) = ’%’
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
JOIN titles ON titleauthor.title_id = titles.title_id
JOIN publishers ON titles.pub_id = publishers.pub_id
WHERE au_fname LIKE @firstname
AND au_lname LIKE @lastname
如果执行 au_info2 时不指定参数,将显示姓以字母 D 开头的所有作者:
EXECUTE au_info2
GO
下面是结果集:
au_lname au_fname title pub_name
——– ——– ——————— ——————-
Dull Ann Secrets of Silicon Val Algodata Infosystems
del Castillo Innes Silicon Val Gastrono Binnet & Hardley
DeFrance Michel The Gourmet Microwave Binnet & Hardley
(3 row(s) affected)
下例在两个参数的默认值已定义的情况下,省略了第二个参数,因此可找到姓为 Ringer 的所有作者的书和出版商:
EXECUTE au_info2 Ringer
GO
au_lname au_fname title pub_name
——— ——— ———————- —————-
Ringer Anne The Gourmet Microwave Binnet & Hardley
Ringer Anne Is Anger the Enemy? New Moon Books
Ringer Albert Is Anger the Enemy? New Moon Books
Ringer Albert Life Without Fear New Moon Books
(4 row(s) affected)

sqlserver怎么创建存储过程

1、自定义存储过程是由用户用户自定义创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。
这里我们看看存储过程的好处:
    1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
    2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率
    3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
    4)安全性。参数化的存储过程可以防止SQL注入式的攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
 
2、存储过程创建的基本语法
    CREATE  PROC  存储过程名
              @参数1  数据类型 = 默认值,
               …… ,
              @参数n  数据类型 OUTPUT
            AS
            SQL语句
    GO
    ,参数是可选的
    ,参数分为输入参数、输出参数
    ,输入参数允许有默认值
创建一个简单的存储过程 UserLogin
CREATE PROCEDURE UserLogin
    @name varchar(20),
    @password varchar(20)
AS
BEGIN
    select * from userinfo where userName=@name and userPass=@password
END
GO
3、存储过程的使用
该存储过程对应的查询SQL语句为:
select * from userinfo where userName=’admin’ and userPass=’admin’
查询结果:
———————
UserName  UserPass
Admin      Admin
使用存储过程UserLogin实现以上效果如下:
exec UserLogin admin,admin
–或这样调用:
EXEC UserLogin @name=’admin’,@password=’admin’
查询结果:
———————
UserName  UserPass
Admin      Admin
在数据中调用存储过程的方法有两种(这里EXEC与EXECUTE等效);
    EXEC  过程名  参数值1,参数值2,….
或者
    EXEC 参数1=参数值1,参数2=参数值2….
4、删除一个存储过程,用drop,如下:
    drop PROCEDURE UserLogin

创建存储过程

create proc procgeta_z
as
declare @i varchar(100)
declare @sql varchar(1000)
set @sql=’’
set @i=65
while @i《91
begin
set @sql=@sql+’ select char(’+@i+’) out union all’
set @i=@i+1
end
set @sql=left(@sql,len(@sql)-9)
exec(@sql)

sql怎样新建存储过程

一:创建没有参数的存储过程:

CREATE PROCEDURE  select_all

AS

BEGIN

SELECT * from T_login1

END

GO

二:创建带参数的存储过程:

CREATE PROCEDURE select_name

@id uniqueidentifier

AS

BEGIN

SELECT * from T_login1 where PSN0001A=@id

END

GO

扩展资料

创建存储过程的注意事项:

1、保持事务简短,事务越短,越不可能造成阻塞。

2、在事务中尽量避免使用循环while和游标,以及避免采用访问大量行的语句。

3、在启动事务前完成所有的计算和查询等操作,避免同一事务中交错读取和更新。可以使用表变量预先存储数据。即存储过程中查询与更新使用两个事务实现。

4、超时会让事务不执行回滚,超时后如果客户端关闭连接sqlserver自动回滚事务。如果不关闭,将造成数据丢失,而其他事务将在这个未关闭的连接上执行,造成资源锁定,甚至服务器停止响应。

如何创建存储过程 (SQL Server Management Studio)

本主题介绍如何使用 SQL Server Management Studio 中的对象资源管理器创建 Transact-SQL 存储过程,并提供一个在 AdventureWorks2008R2 数据库中创建简单存储过程的示例。创建存储过程在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。展开“数据库”、存储过程所属的数据库以及“可编程性”。右键单击“存储过程”,再单击“新建存储过程”。在“查询”菜单上,单击“指定模板参数的值”。在“指定模板参数的值”对话框中,“值”列包含参数的建议值。接受这些值或将其替换为新值,再单击“确定”。在查询器中,使用过程语句替换 SELECT 语句。若要测试语法,请在“查询”菜单上,单击“分析”。若要创建存储过程,请在“查询”菜单上,单击“执行”。若要保存脚本,请在“文件”菜单上,单击“保存”。接受该文件名或将其替换为新的名称,再单击“保存”。安全说明验证所有用户的输入。验证前请勿连接用户输入。绝对不要执行根据尚未验证的用户输入构造的命令。有关详细信息,请参阅SQL 注入。创建存储过程的示例在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。依次展开“数据库”、AdventureWorks2008R2 数据库和“可编程性”。右键单击“存储过程”,再单击“新建存储过程”。在“查询”菜单上,单击“指定模板参数的值”。在“指定模板参数的值”对话框中,输入下列所示的参数值。参数值Author您的姓名Create Date今天的日期Description返回雇员数据。Procedure_nameHumanResources.uspGetEmployees@Param1@LastName@Datatype_For_Param1nvarchar(50)Default_Value_For_Param1NULL@Param2@FirstName@Datatype_For_Param2nvarchar(50)Default_Value_For_Param2NULL单击“确定”。在查询器中,使用以下语句替换 SELECT 语句: SELECT FirstName, LastName, JobTitle, Department FROM HumanResources.vEmployeeDepartment WHERE FirstName = @FirstName AND LastName = @LastName;若要测试语法,请在“查询”菜单上,单击“分析”。如果返回错误消息,则请将这些语句与上述信息进行比较,并视需要进行更正。若要创建存储过程,请在“查询”菜单上,单击“执行”。若要保存脚本,请在“文件”菜单上,单击“保存”。输入新的文件名,再单击“保存”。若要运行存储过程,请在工具栏上单击“新建查询”。在查询窗口中,输入下列语句:USE AdventureWorks2008R2; GO EXECUTE HumanResources.uspGetEmployees @FirstName = N’Diane’, @LastName = N’Margheim’; GO在“查询”菜单上,单击“执行”。请参阅任务如何在 SQL Server Management Studio 中使用模板如何修改存储过程 (SQL Server Management Studio)如何删除存储过程 (SQL Server Management Studio)参考CREATE PROCEDURE (Transact-SQL)概念》创建存储过程(数据库引擎)其他资源存储过程帮助主题

sqlserver怎么创建存储过程

第一步:点击数据库下的“可编程性”,选择“存储过程”,点击鼠标右键,选择“新建存储过程”

第二步:在create PROCEDURE 后 输入存储过程的名字,紧跟着的就是定义存储过程的参数,接下来就可以去编写自己所需要组装的存储过程语句了。

注意,怕写的不对,可以执行下,想验证sql语句是否正确,就使用print输出下。

第三步:点击上面的执行,存储过程就写好了,要怎么调用呢,在sqlserver的语句查询框中,输入exec 存储过程名 参数,执行就可以了。

注意事项:

注意执行exec时,参数的类型,要与建立的存储过程时设置的参数类型一致。