应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

sqlserver存储过程

5508人阅读 2020/5/20 17:20 总访问:5194862 评论:0 收藏:0 手机
分类: 数据库

什么是存储过程:

   预编译的sql语句,可以放很多sql语句,里边可以写条件,循环,可以把一些逻辑放到存储过程里边处理

   比如转账。


优点:

   1:减少sql语句长度,本身需要很多条sql才能解决的问题,现在只需要使用存储过程名称代替。

   2:提高查询效率,因为存储是预编译的sql语句,存储过程创建的时候会变成二进制,下次在执行的时候不需要重新编译直接执行(*****)

   3:封装,把很多逻辑封装起来

   4:安全性


缺点:

   维护困难,有些公司喜欢把一些复杂的逻辑写到存储过程,调试麻烦,出错之后不好找问题。


   

   存储过程分类:

         1:系统自带的存储过程(数据库自带)

               查询所有数据库的存储过程:sp_databases

               查询表字段的存储过程    :sp_columns

          

         2:用户自定义存储过程(自己写的)

               语法:

               create procedure 存储过程名字 [参数列表]  输出参数需要加 out

               as

               begin

                  .........TSQL语句...........

               end

               

         3:执行存储过程

               execute 存储过程名称 [参数列表]  输出参数需要加 out

               

               传递参数两种方法:

               

               1:execute 存储过程名称 参数名=value,参数名2=value,参数名3 = 输出参数 out ........(指定参数名)

               

               2: execute 存储过程名称 value,value2,输出参数 out  (省略参数名)

          

         

         4: 写一个没有参数的存储过程,就输出一句固定值

               create proc proc_show

               as 

               begin

                  print('hello proc')

               end;

          

          

               exec proc_show

   

         5: 输出一个变量的值,有一个参数的存储过程

               create proc proc_show2(@value nvarchar(64))

               as

               begin

                  print(@value);

               end

               

               exec proc_show @value ='hello'

               exec proc_show 'proc'

               

               

         6: 求合存储过程,两个输入参数

              create proc proc_sum(@p1 int,@p2 int)

              as

              begin

                 print(@p1+@p2);

              end

         

         7:   求和存储过程,两个输入参数,还有一个输出参数(输出参数为两个输入参数的合)

              create proc proc_sum2(@p1 int,@p2 int,@sum int out)

              as

              begin

                 @sum = @p1+@p2;

              end

              

存储过程例子:

  1. exec sp_databases
  2. exec sp_columns 'userinfo'
  3. select * from dbo.UserInfo
  4. create proc proc_show
  5. as 
  6. begin
  7.   print('hello proc')
  8. end;
  9. exec proc_show
  10. create proc proc_show2(@value nvarchar(64))
  11. as
  12. begin
  13.       print(@value);
  14. end
  15. exec proc_show2 @value = 'hello'
  16. exec proc_show2 'proc'
  17. --求和存储过程
  18. create proc proc_sum(@p1 int,@p2 int)
  19. as
  20. begin
  21.  print(@p1+@p2);
  22. end
  23. execute proc_sum @p1=6,@p2 =7
  24. execute proc_sum 8,9
  25. go
  26. --求和存储过程2  (含有输出参数的存储过程)        
  27. -- @p1 =8,@p2=8  , @sum = @result out  = @p1+@p2
  28. create proc proc_sum2(@p1 int,@p2 int,@sum int out)
  29. as
  30. begin
  31.   set @sum = @p1+@p2;
  32. end
  33. go
  34. --定义一个变量,作用:用于接收存储过程的输出参数
  35. declare @result int
  36. exec proc_sum2 @p1 =3,@p2=5,@sum = @result out
  37. print @result
  38. declare @result int
  39. exec proc_sum2 8,8,@result out
  40. print @result
  41. --用户名和学号去查询用户表,为空忽略条件
  42. go
  43. alter proc proc_select(@username nvarchar(64),@number nvarchar(64))
  44. as
  45. begin
  46.       --为空就查询全部
  47.       if(@username ='' and @number ='')
  48.           select * from UserInfo    
  49.       --用户名不为空,学生不为空,说明需要根据这两个条件去查询
  50.       else if(@username !='' and @number !='')
  51.           select * from UserInfo where username =@username and number = @number
  52.       --用户名为空,学号不为空就根据学号查询
  53.       else if (@username ='' and @number !=''
  54.           select * from UserInfo where number =@number
  55.       else
  56.         select * from UserInfo where username =@username
  57. end
  58. --当两个条件为空查询全表
  59. exec proc_select '',''
  60. exec proc_select '刘备',''
  61. exec proc_select '刘备','001'
  62. exec proc_select '','NS008'
  63. exec proc_select '诸葛亮','NS008'
  64. --动态执行sql语句
  65. --declare @sql nvarchar(64)
  66. --set @sql='select * from UserInfo where id=1';
  67. --exec(@sql)
  68. --查询用户表存储过程
  69. alter proc proc_select(@username nvarchar(64),@number nvarchar(64))
  70. as
  71. begin
  72.   select * from userinfo where username = @username or number = @number
  73. end
  74. exec proc_select '吕布','ns008'


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

sqlserver order by

order by 字段名order by 第几个字段(整形)order by 排序:order by 字段名:通过字段名指定的字段排序 order by 字段数...

sqlserver保障远程连接的安全性

如果是只读的话建个视图,建个普通用户只对该视图进行读。读写的话就只能自己在加一层代理服务,由代理来进行读写,各客户...

sqlserver约束

添加表后操作约束--删除约束 altertableaj_testdropconstraintCK__aj_test__userAge__5EBF139D --为表aj_test添加默认...

sqlserver存储过程拼接sql语句,分页

在写有些存储过程的时候需要进行sql的拼接,然后在使用exec函数执行sql语句注意字符串的拼接,看下面一段存储过程的sql语句...

sqlserver常用操作

创建临时表createtable#表名() select字段1,字段2....字段ninto#表名from表[where1=1]删除临时表ifOBJECT_ID('tempdb....

Serilog日志记录到sqlserver以及其中存在的问题

1.首先来一大串的安装Install-PackageSerilog //控制台输出 Install-PackageSerilog.Sinks.Console //文件输出 Install...

sqlserver监控sql语句

首先在工具中打开sql server profiler然后登录一下这里可以进行一些常规的筛选,不然监控的sql语句很多的右下方还可以进行...

sqlserver数据库+DBHelper

原始的ASP.NET数据库查询,所需要的帮助类publicclassDBHelper {//创建全局对象 staticSqlConnectionconn=newSqlConnecti...

Core使用codefirst创建sqlserver数据库

1.先添加以下程序包Install-PackageMicrosoft.EntityFrameworkCore Install-PackageMicrosoft.EntityFrameworkCore.SqlSer...

sqlserver ROW_NUMBER 分页

很简单的一个sql语句根据行号分页即可 select * from (select *,ROW_NUMBER() over(order by id) as rownumber from[dbo]....

sqlserver跨库复制表

sql语句:select*intoResourcefromXJ.[dbo].[Resource]注意主键、外键、约束、触发器、索引都不会被复制,只是数据会被复制...

sqlserver基础查询

select top 1 from table1 //————返回表中第一条数据 select top 10 percent * from table1 //...

sqlserver函数

函数系统自带函数(avg,sum,min,max,count),用户自定义函数 系统分类:表值函数,标量值函数,聚合函数 函数语法:函数必...

sqlserver事务

事务:把所有的操作当中一个整体,要么全部成功,要么全部失败 一旦开启了事务所有的操作都是临时的,你可以选择提交或者...

sqlserver触发器

触发器什么是触发器:触发器是个特殊的存储过程,不是由用户触发,是系统根据事件来触发。对表操作比如 添加,删除,...