存储过程入门(一)。
一、存储过程的定义和概括:
存储过程就是通过将实现某个常用或是复杂的功能的SQL语句事先编写好并声明一个名字保存在数据库的一串SQL代码。
那么有人就会有疑问了,既然存储过程就是一串SQL语句,那我们还为什么要单独的弄这样一个技术能。接下来我们就来看看存储过程的有点。
存储过程的优点:
1)、可重复使用。类似于方法,从而减少数据库开发人员的代码量。
2)、提高性能:存储过程再创建的时候就经过了编译,再次使用的时候不需要再次编译。而一般的SQL语句再次使用的时候不但要再次缀写编码而且也要进行再次编译。
3)、减少网络流量。存储过程存储在服务器上,调用的时候只需要给出存储过程的名称和参数即可,因此减少了网络传输数据量。
4)、安全性。参数化的存储过程可以防止注入攻击。
二、存储过程的创建:
创建语法: CREATE PROC [EDURE] procedure_name[;number] [{@parameter data_type} [VARYING][=default][OUTPUT]] [,...n] [WITH {RECOMPILE|ENCRYPTION|RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] --参数含义 procedure_name: 存储过程名称,后跟的number必须为数字,是为了区分一组同名的存储过程。一个数据库中存储过程的名字比喻唯一。 @parameter:是存储过程的参数。在Create Procedure 语句中,可以声明一个或多个参数。当调用该存储过程时,用户必须给出所有的参数值,除非定义了参数的缺省值。若参数的形式以 @parameter=value 出现,则参数的次序可以不同,否则用户给出的参数值必须与参数列表中参数的顺序保持一致。若某一参数以@parameter=value 形式给出,那么其它参数也必须以该形式给出。一个存储过程至多有1024 个参数。@开头表示局部变量,@@开头表示全局变量。 data_type:数据类型。在存储过程中,所有的数据类型包括text 和image 都可被用作参数。但是,游标cursor 数据类型只能被用作OUTPUT 参数。当定义游标数据类型时,也必须对VARING 和OUTPUT 关键字进行定义。对可能是游标型数据类型的OUTPUT 参数而言,参数的最大数目没有限制。 VARYING:指定OUTPUT参数支持的结果集,仅用于游标的定义。 default:是指参数的缺省值。如果定义了缺省值,那么即使不给出参数值,则该存储过程仍能被调用。缺省值必须是常数,或者是空值。 OUTPUT:表明该参数是一个返回参数。用OUTPUT 参数可以向调用者返回信息。Text 类型参数不能用作OUTPUT 参数。 RECOMPILE:指明SQL Server 并不保存该存储过程的执行计划,该存储过程每执行一次都又要重新编译。 ENCRYPTOIN:表明SQL Server 加密了syscomments 表,该表的text 字段是包含有Create procedure语句的存储过程文本,使用该关键字无法通过查看syscomments 表来查看存储过程内容。 FOR REPLICATION:选项指明了为复制创建的存储过程不能在订购服务器上执行,只有在创建过滤存储过程时(仅当进行数据复制时过滤存储过程才被执行),才使用该选项。FOR REPLICATION与WITH RECOMPILE 选项是互不兼容的。 AS:表面该存储过程要执行的动作。 sql_statement:是任何数量和类型的包含在存储过程中的SQL 语句。
小例子:

下面来个小例子: CREATE PROC userquery @username varchar(20) @password varchar(20) AS BEGIN select * from userinfo where username=@username and password=@password END GO ----------------------------------------------------- 运行 exec userquery @username="admin" @password="123456" ------------------------------------------------------ 结果: username password admin 123456
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束