设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间04 现在时间04 缓存数据 十七岁吻的人额头没有粉底

十七岁吻的人额头没有粉底 -- 十七岁

查看: 283|回复: 2

Sql Server存储过程详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:25
  • 打卡月天数:0
  • 打卡总奖励:324
  • 最近打卡:2025-03-31 05:47:37
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
303
主题
247
精华
0
金钱
1169
积分
602
注册时间
2023-1-25
最后登录
2025-5-31

发表于 2025-3-16 02:49:43 | 显示全部楼层 |阅读模式
从存储过程返回数据 - SQL Server | Microsoft 官方文档
存储过程它是真正的脚本,更准确地说,它是批处理(batch),但都不是很确切,它存储与数据库而不是单独的文件中。
存储过程中有输入参数,输出参数以及返回值等。
1.jpeg

一、创建存储过程:CREATE PROC

创建存储过程的方法除了他使用AS关键字外,和创建数据库中任何其他对象一样。存储过程的基本语法如下:
在语法中,PROC是PROCEDURE的缩写,两个选项的意思一样。在对存储过程命名完之后,接着是参数列表。参数是可选的。关键字AS其后就是实际的代码。
CREATE PROCEDURE|PROC <sproc name>  [ [schema.] <data type> [VARYING] [=] [OUT[PUT]] [READONLY]  [, [schema.] <data type> [VARYING] [=] [OUT[PUT]] [READONLY]  [,...  ...      ]]  [WITH   RECOMPILE | ENCRYPTION | [EXECUTE AS { CALLER | SELF | OWNER | <'user name'>}]  AS  <code> | EXTERNAL NAME <assembly name>.<assembly class>.<method>简单的存储过程示例:
CREATE PROC spPerson  AS    SELECT * FROM Person执行存储过程:
EXEC spPerson1、声明参数

声明参数需要以下几部分的信息:名称、数据类型 、默认值 、方向、
对于名称,有一组简单的规则。

  • 它必须以@符号(和变量一样)开始。此外,除了不能内嵌空格外,其规则与普通变量规则相同。
  • 数据类型和名称一样,必须像变量那样声明,采用SQL Server内置的或用户自定义的数据类型。
  • 声明需要类型时需要注意,当声明CURSOR类型参数时,必须也使用VARYING和OUTPUT选项。同时,OUTPUT可以简写为OUT。
其语法如下所示:
@parameter_name [AS] datatype [=default|NULL] [VARYING] [OUTPUT | OUT]一个需要传入参数的存储过程示例:
CREATE PROC spName    @Name nvarchar(50)  AS  SELECT Name FROM Person WHERE Name LIKE @Name + '%';执行存储过程:
EXEC spName '酒';2、提供默认值

在默认值方面,参数与变量不同。对于同样的情况,变量一般初始化为NULL值,而参数不是。事实上,如果不提供默认值,则会假设参数是必须的,并且当调用存储过程时需要提供一个初始值。
为了使参数是可选的,必须提供默认值。方法是在数据类型后在逗号之前添加"="符号和作为默认值的值。这样,存储过程的用户可以有决定对此参数不提供值或是提供他们自己的值。
创建一个存储过程如下:
CREATE PROC spName  @Name nvarchar(50) = NULL  AS  IF @Name IS NOT NULL      SELECT * FROM Person WHERE NAME = @Name  ELSE      SELECT * FROM Person WHERE Id = 45执行如下语句:
EXEC spName EXEC spName '如意刀狼'输出结果如下:
2.jpeg

3、输出参数

一个获得OUTPUT参数的存储过程:
CREATE PROC InsertPerson      @Id int OUTPUT  --必须注明为OUTPUT  AS  INSERT INTO Person VALUES('刘备',22,190,'不详','未婚','幼儿园','不详',4999999)  SET @Id = @@IDENTITY执行存储过程:
DECLARE @Id int  --实际上,调用时名称可以不同,例如也可以为@Num,@i等等。EXEC InsertPerson @Id OUTPUT    --注意此处也要有OUTPUTSELECT @Id4、返回值。返回值必须是整数。

返回值可用来确定存储过程执行的状态。
SQL Server默认会在完成存储过程时自动返回一个0值。
为了从存储过程向调用代码传递返回值,只需要使用RETURN语句。
RETURN []要特别注意的是:返回值必须是整数
关于RETURN语句,最重要的是知道它是无条件地从存储过程中退出的。无论运行到存储过程的哪个位置,在调用RETURN语句之后将不会执行任何一行代码。
下面的存储过程,让其返回一个指定的值,以指示执行状态。
CREATE PROC spTestReturns  AS  DECLARE @MyMessage nvarchar(50);  DECLARE @MyOtherMessage nvarchar(50);  SELECT @MyMessage = '第一个RETURN';  PRINT @MyMessage;      RETURN 100;        --将这里改成返回100  SELECT @MyOtherMessage = '第二个RETURN';  PRINT @MyOtherMessage;  RETURN;执行之后,显示结果如下:
DECLARE @Return intEXEC @Return = spTestReturns  //第一个RETURNSELECT @Return   //返回1005、执行存储过程:

对于调用存储过程需要注意以下几点:

  • 对于存储过程声明中的输出参数,需要使用OUTPUT关键字。
  • 和声明存储过程时一样,调用存储过程时,必须使用OUTPUT关键字。这样就对SQL Server作了提前通知,告诉它参数所需要的特殊处理。但需要注意的是,如果忘记包含OUTPUT关键字,不会产生运行时错误,但是输出的值不会传入变量中(变量很可能是NULL)。
  • 赋值给输出结果的变量不需要和存储过程中的内部参数拥有相同的名称。
  • EXEC(或EXECUTE)关键字是必须的,因为对存储过程的调用并不是批处理要做的第一件事(如果存储过程的调用是批处理的第一件事,则可以不使用EXEC)。
6、WITH RECOMPILE选项

可以利用存储过程提供的安全性代码和代码封装方面的好处,但还是忽略了预编译代码方面的影响。可以回避未使用正确的查询计划的问题,因为可以确保为特定一次运行创建新的计划。方法就是使用WITH RECOMPILE选项。
使用该选项的方式有两种:
1、可以在运行时包含WITH RECOMPILE。这告诉SQL Server抛弃已有的执行计划并且创建一个新的计划-但只是这一次。也就是说,只是这次使用WITH RECOMPILE选项来执行存储过程。
EXEC spMySproc '1/1/2004'  WITH RECOMPILE2、也可以通过在存储过程中包含WITH RECOMPILE选项来使之变得更持久。
如果使用这种方式,则在CREATE PROC或ALTER PROC语句中的AS语句前添加WITH RECOMPILE选项即可。如果通过该选项创建存储过程,那么无论在运行时选择了其他什么选项,每次运行存储过程都会重新编译它。
二、修改存储过程:ALTER PROC

ALTER PROC spPerson  AS  SELECT * FROM Person WHERE Id = 45三、删除存储过程:DROP PROC

DROP PROC|PROCEDURE <sproc name>[;]四、常用存储过程

1、sp_help: 查询表的信息

sp_help Person
3.jpeg

看一张表有那些信息,有约束,存储过程,自定义函数等等信息。
2、sp_helpdb: 查看数据库信息

sp_helpdb TestDataCenter当然也可以不带参数,显示当前数据库连接下的所有数据库信息。
4.jpeg

这张图几乎包含了数据库的所有信息了。有了这张图,想了解一个数据库的信息就简单了。
3、sp_helpindex: 查看有关表或视图上的索引的信息

sp_helpindex Person注意参数中是表名,上面的Person就是表名,而不是索引名称。
5.jpeg

4、sp_helpconstraint: 查看表上的约束信息

sp_helpconstraint Person注意参数是表名。
6.jpeg

5、sp_helpfile: 根据文件逻辑名称, 查看文件的信息

sp_helpfile TestDataCenter注意参数是文件的逻辑名称。也可以不带参数,输出当前数据库的所有文件信息。
7.jpeg

6、sp_helpfilegroup: 根据文件组名称,查看文件组信息

sp_helpfilegroup 'PRIMARY'参数名中是文件组的逻辑名称,当然也可以不带参数,这样就仅仅输出当前数据库的文件组信息。
显示结果如下:
8.jpeg

7、sp_helptext:显示默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束灯等的定义。

sp_helptext spName
9.jpeg

返回的是什么?就是定义的代码。
到此这篇关于Sql Server存储过程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
14
积分
8
注册时间
2022-12-30
最后登录
2022-12-30

发表于 2025-3-23 20:57:57 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
16
积分
12
注册时间
2022-12-25
最后登录
2022-12-25

发表于 3 天前 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表