【数据库SQLServer】存储过程编写笔记

SQLServer笔记-存储过程

    • 一、为啥使用存储过程
    • 二、自定义存储过程的创建
    • 三、自定义存储过程
        • 声明变量、赋值变量
        • 数组变量
        • 执行字符串拼接的语句
        • 执行循环语句
  • 注意:学好基础的SQL语法和编程思想,自定义存储过程入门还是比较容易的

  • 背景描述:满足一个过亿的客户端操作数据,且避免编写服务器端的程序管理;于是试试存储过程并记录从学习到遇到的坑

一、为啥使用存储过程

  • 官方给的定义 预编译SQL语句的集合,这些集合存储在一个名称下面,并作为一个单元处理。顾名思义就是把一段SQL语句合并成一个类似于C++中函数(Java中方法),直接给其他程序调用
  • 存储过程分类:系统存储过程、自定义存储过程(SQL语句集合)、扩展存储过程(编程语言写的)

二、自定义存储过程的创建

使用SSMS创建的存储过程模板

-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		
-- Create date: 
-- Description:	
-- =============================================
CREATE PROCEDURE    -- 设置存储过程的名称
	-- Add the parameters for the stored procedure here   以下添加存储过程的变量
	<@Param1, sysname, @p1>  = , 
	<@Param2, sysname, @p2>  = 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON; --- 关闭计数,提高执行效率

    -- Insert statements for procedure here
	SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

写个小案例,设计一个小表tUser,存储了下面信息

FID FName
1 A
2 B
3 C

CREATE PROCEDURE QueryName
	 @ID int = 1, --- 输入参数 int类型,默认数值是1
	 @Name NVARCHAR(255) out --- 输出参数,字符串(类似编程语言中引用)
AS
BEGIN
	SET NOCOUNT ON;

    -- 函数执行体
	 SELECT [FID],[FName]  FROM [dbo].[tUser]  WHERE FID = @ID 
	 return 1
	 END
GO

执行存储过程语句是

DECLARE	@return_value int,
		@Name nvarchar(255)

EXEC	@return_value = [dbo].[QueryName]
		@ID = 1,
		@Name = @Name OUTPUT

SELECT	@Name as N'@Name'

SELECT	'Return Value' = @return_value

执行结果是
【数据库SQLServer】存储过程编写笔记_第1张图片
截止目前为止,了解了一个什么叫存储过程,和简单函数的框架的编写

三、自定义存储过程

声明变量、赋值变量

--- DECLARE  @+变量名称 变量类型
-- 注意变量一定要使用 @开始
DECLARE @Value  INT 
SET @Value=1   - - 赋值 方法一
SELECT @Value =1 -- 赋值方法二

数组变量

使用Table 变量存储数组;存储变量后,调用方式和表操作一样;数值不大的时候 尽可能使用表变量。数值比较大的时候 使用临时表

DECLARE @TmpRes TABLE (
				 [FName] [varchar](256) NULL
				,[FID]      int 
			 ) 

执行字符串拼接的语句

EXEC
 EXEC sp_executesql
DECLARE @SQLQueryMaxMin NVARCHAR(2000)
DECLARE @MaxValue NVARCHAR(255)
DECLARE @MinValue NVARCHAR(255)
									
 SET  @SQLQueryMaxMin = 'SELECT @MaxValue= MAX([FID]),@MinValue=MIN([FID])  FROM '+@ParamTableName					 						             
 EXEC sp_executesql  @SQLQueryMaxMin,N'@MaxValue VARCHAR(255) output ,@MinValue VARCHAR(255) output'
							 ,@MaxValue output
							 ,@MinValue output

执行循环语句

使用TOP 1循环

		WHILE EXISTS(SELECT [FID] FROM @TmpRes)
			BEGIN
				SELECT TOP(1)
					@[FID]=[[FID]]
				FROM @TmpRes	
--- 执行相关动作
			DELECT FROM @TmpRes WHERE FID=@FID

还可以使用 游程、设置只检索一行的方式执行

注意:学好基础的SQL语法和编程思想,自定义存储过程入门还是比较容易的

你可能感兴趣的:(数据库,sqlserver,数据库,database)