关于存储过程的总结
1. 存储过程
-
查询存储过程
select * from sys.objects where name = 'GetUser' --存储 过程名称 复制代码
-
创建,修改存储过程
create / alter proc GetUser --创建存储过程 GetUser @Id int --参数 as set nocount on; --不返回计数,提高应用程序性能 begin --开始 select * from [dbo].[User] where Id=@Id --执行sql语句 --如果 需要返回值的话 return @Id end;--结束 复制代码
-
删除
drop proc GetUser --删除 GetUser 复制代码
-
执行
EXEC GetUser 1; --1是参数 复制代码
2.函数(Function)
只能用表变量
-
查询函数
select * from sys.objects where name = 'f_splitlianxi' --函数名称 复制代码
-
创建修改
create / ALTER FUNCTION [dbo].[f_splitlianxi] -----id 为第几个字段 ,val 为该字段值 ( @str NVARCHAR(max),--要分割的字符串 @fengefu NVARCHAR(20)--进行分割的符号 )RETURNS @table TABLE(id INT,val NVARCHAR(max)) AS BEGIN DECLARE @index INT,@startsplit INT,@id INT --@index分隔符所在的位置的下标 @startsplit 每次分割开始的位置 SELECT @index=CHARINDEX(@fengefu,@str),@startsplit=1,@id=1 WHILE @index>0 BEGIN IF @id>1 --第一次循环之后 都执行这个方法体中的代码 BEGIN SELECT @startsplit=@index+LEN(@fengefu) --分割开始位置等于 之前的字符下标位置+字符本身的长度 SELECT @index=CHARINDEX(@fengefu,@str,@startsplit) END IF @index>0 --第一次循环 截取位置从@startsplit=1开始 BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) --要截取的字符串 开始位置 要截取的长度 END ELSE BEGIN --最后一次循环 此时由于匹配不到分割字符 @index=0 截取剩余的字符串 INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1)) END SELECT @id=@id+1 END RETURN END 复制代码
-
删除
drop function function_name; --函数名称 复制代码
-
执行
select * from dbo.f_splitlianxi('123;234',';') 复制代码
结果如下
id val 1 123 2 234
两者的区别
存储过程和函数的区别要有:
1、存储过程是SQL语句和可选控制流语句的预编译集合,而函数是由一个或多个 SQL 语句组成的子程序;
2、存储过程可以在单个存储过程中执行一系列SQL语句,而自定义函数有诸多限制;
3、执行方式不同。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END