【数据库SQLServer】存储过程编写笔记
SQLServer笔记-存储过程一、为啥使用存储过程二、自定义存储过程的创建三、自定义存储过程声明变量、赋值变量数组变量执行字符串拼接的语句执行循环语句注意:学好基础的SQL语法和编程思想,自定义存储过程入门还是比较容易的背景描述:满足一个过亿的客户端操作数据,且避免编写服务器端的程序管理;于是试试存储过程并记录从学习到遇到的坑一、为啥使用存储过程官方给的定义 预编译SQL语句的集合,这些集合存储
·
SQLServer笔记-存储过程
- 背景描述:满足一个过亿的客户端操作数据,且避免编写服务器端的程序管理;于是试试存储过程并记录从学习到遇到的坑
一、为啥使用存储过程
- 官方给的定义 预编译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: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- 设置存储过程的名称
-- Add the parameters for the stored procedure here 以下添加存储过程的变量
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
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
执行结果是
截止目前为止,了解了一个什么叫存储过程,和简单函数的框架的编写
三、自定义存储过程
声明变量、赋值变量
--- 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语法和编程思想,自定义存储过程入门还是比较容易的
更多推荐
已为社区贡献1条内容
所有评论(0)