当前位置:首页 » 服务存储 » 系统存储过程摘要在哪
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

系统存储过程摘要在哪

发布时间: 2023-08-06 15:24:35

数据库储存过程有哪些种类

一个存储过程既是一个系统的标准组件,也是一个可编程的函数,它在数据库中创建并保存,总体来说关系数据库系统中存在如下几大类型存储过程。

1.系统存储过程系统存储过程以sp_开头,用来进行系统的各项设定,取得系统的各项信息,管理系统的各项相关工作。

2.本地存储过程本地存储过程由用户创建,是为了完成某一特定功能的sql语句集。事实上,一般所说的存储过程就是指本地存储过程。

3.临时存储过程临时存储过程分为本地临时存储过程、全局临时存储过程两种。

((1)本地临时存储过程。以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它。

(2)全局临时存储过程。以两个井字号(##)开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程。全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

4.远程存储过程在特定数据库中,远程存储过程是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

5.扩展存储过程扩展存储过程是用户使用外部程序语言编写的存储过程,扩展存储过程的名称通常以xp_开头。

❷ 知道存储过程名怎么查看存储过程代码

使用SQL Server Management Studio在列表中查看即可。

步骤:

1、登录SQL Server Management Studio。

2、左边的树点击要查询的库左边的“+”,点开后会变成“-”,下同。

6、如果是查看系统存储过程,在第3步后点击系统存储过程,然后找到要查的名字,同第4,5步即可。

❸ 数据库原理-存储过程的类型有哪些分别有什么特征。

(3).存储过程分类<1>.系统存储过程系统存储过程(System
Stored
Proceres)主要存储在master数据库中,并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL
Server提供支持。<2>.本地存储过程本地存储过程(Local
Stored
Proceres)也就是用户自行创建在用户数据库中的存储过程。事实上一般所说的存储过程值得就是本地存储过程。用户创建的存储过程是由用户创建并能完成某一特定功能(如查询用户所需的数据信息)的存储过程。<3>.临时存储过程临时存储过程(Temporary
Stored
Proceres)可分为以下两种:A.本地临时存储过程如果在创建存储过程中,以井号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程(例如,CREATE
PROCEDURE
#book_proc.....)。本地临时存储过程只有创建它的连接的用户才能够执行它,而且一旦这位用户断开与SQL
Server的连接,本地临时存储过程就会自动删除,当然,这位用户也可以在连接期间用DROP
PROCEDURE命令删除多创建的本地临时存储过程。B.全局临时存储过程如果在所创建的存储过程名称是以两个井号(#
#)开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,如果没有,便立即将全局临时存储过程删除;如果有,SQL
Server会让这些执行中的操作继续进行,但是不允许任何用户再执行全局临时存储过程,等到所有未完成的操作执行完毕后,全局临时存储过程就会自动删除。由于全局临时存储过程能够被所有的连接用户使用,因此,必须注意其名称不能和其他连接所采用的名称相同。<4>.远程存储过程远程存储过程(Remote
Stored
Proceres)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

❹ 什么是系统存储过程

系统存储过程一般来讲是数据库系统自身的过程,是一种不允许被用户修改的过程,你可以在过程中点右键,“编辑”是灰色的。
系统存储过程其实也类似于我们自己创建的存储过程,是对系统的运行起到关键作用的过程,所以不允许被用户修改;因为如果错误的修改,可能导至数据库的异常或崩溃;
系统过程是一些数据库结构本身的操作,或者是一些系统特定的功能,比如附加数据库文件的系统过程,查看帮助信息的系统过程等等;如果这些都可以被你修改,那么他们的数据的核心也就可以随便被别人知道了。因为过程中可能存在数据库的核心算法,那不被其它竞争厂家学到手了。
要知道为什么每种数据库的性能有如此大的差别,一个与设计的核心原理有关,另一个与他们提供的各种算法有相当大的关系。
你可以看一看各种数据库的基础,龙其是算法分析。不过要一定的基础才能看懂。

❺ 系统存储过程存储在哪个数据库中

sysobjects表里面会保存存储过程的相关信息
select * from sysobjects where id=object_id( '所有者.存储过程名 ')
存储过程的主体内容则保存在 数据库名字-->可编程行-->存储过程 下面
系统表:syscomments
直接看不方便可以用系统存储过程sp_helptext

❻ 如何查看存储过程运行到哪个语句了

存储过程(procere 过程)

SQL Server2005 的存储过程包含一些 T-SQL 语句并以特定的名称存储在数据中(存储过程也是一种数据库对象)可以在存储过程中声明变量,有条件的执行及其他各项强大的程序设计功能

SQL Server2005 的存储过程与其它育种设计语言的过程类似,同样按以下方式运行:
(1)它能够包含执行各种数据库操作的语句,并且可以调用其他的存储过程;
(2)能够接受输入参数,并以输出参数的形式将多个数据值返回给调用程序(Calling Procere)或批处理(Batch);
(3)向调用程序或批处理返回一个状态值,以表明成功或失败(以及失败的原因);
(4)存储过程(Stored Proceres) 是一组为完成特定功能的SQL 语句集,经编译后,存储在数据库中,用户通过指定存储过程的名字给出参
数(如果该存储过程带有参数)来执行它;

存储过程的类型:
一、(系统存储过程):存储过程在运行时生成执行方式,其后在运行时执行速度很
SQL Server2005 不仅提供用户自定义存储过程的功能,而且也提供许多可作为工具使用的系统存储过程;
系统存储过程(Systerm StroedProceres) 主要存储在master数据库中,并以 sp_ 为前辍,并且系统存储过程主要是从系统表中获取信息,从而为管理员SQL Server2005提供支持。通过系统存储过程SQL Server2005中的许多管理性或信息性的活动(如了解数据对象,数据库信息等)都可以被有效地完成,尽管这些系统存储过程被存储在master数据库中,但是仍然可以在其他 数据库中对其进行调用,在调用时,不必在存储过程前面加上数据库名,而且当创建一个数据库时,一些存储过程会在新的数据库中被自动创建;
系统存储过程所能完成操作很多,如提供帮助的存储过程
sp_helpsql 显示关于SQL语句,存储过程和其他主题的信息
sp_help 提供关于存储过程或其他数据库对象的报告
sp_helptext 显示存储过程和其他对象文本
sp_depends 列举引用或依赖指定对象的所有存储过程
sp_talbes 取得数据库中关于表和视图的相关信息,
sp_renameedb 更改数据库的名称

SQL Server2005系统存储过程可以使用户很容易地从系统表中提取信息,管理数据库,并执行涉及更新系统表的其他任务
系统存储过程中在master数据库中创建,由系统管理员管理,所有系统存储过程的名字均以sp_开始
如果过程以sp_前缀命名的过程在当前数据库中找不到,SQL Server2005就在master数据库中寻找,以sp_前缀命名的过程中引用的表如果不能在当前数据库中解析出来,将在master数据库查找

当前系统存储过程的参数是保留字或对象名,且对象名由数据库或拥有者名字限定时,整个名字必须包含在单引号中,一个用户可以在所有数据库中执行一个系统存储过程的许可权,否则在任何数据库中都不能执行系统存储过程

二、(本地存储过程)
本地存储过程(Local Stored Proceres)也就是用户自行创建并存储在用户数据库中的存储过程,一般所说的存储过程就是指的是本地的
用户创建的存储过程是由用户创建并能完成某一特定功能(如:查询用户所需要的数据信息)的存储过程

三、(临时存储过程)
临时存储过程(Temporary StoredProceres)可分为以下两种
1)本地临时存储过程
不论哪一个数据库是当前数据库,如果在创建存储过程时,以井字号 (#) 作为其名称的,第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存放存储过程(如:CREATE PROCEDURE #book_proc) 本地临时存储过程只有创建它的连接的用户才能够执行它,而且一但这位用户断开与 sql-server的连接(也就是注销sql-server2005)本地临时存储过程就会自动删除,当然,这位用户也可以连接期间用 DROP PROCEDURE 命令删除他所创建的本地临时存储过程;
由于本地存储过程的适用范围仅限于创建它的连接,因此,不需担心其名称会和其他连接所采用的名称相同

2)全临时存储过程
不论哪一个数据库当前数据库,只要所创建的存储过程名称是以两个井字号(##)开始,则该存储过程将成为一个存储在tempdb 数据库中的全局临时存储过程(例如:create procere ##book_proc) 全局临时存储过程一旦创建,以后连接到 SQL Server2005 的任意用户都能执行它,而且不需要特定的权限
当创建全局临时存储过程的用户断开与SQL Server2005的连接时,SQL Server2005将检查是否有其他用户在执行该全局临时存储过程,如果没有,便立刻将全局临时存储过程删除,如果有SQL Server2005会让这些正在执行中的操作继续进行,但是不允许任何用户再执行全局临时存储过程,等到有未完成的操作执行完毕后,全局临时存储过程就会自动删除;
由于全局临时存储过程能够被所有的连接用户使用,因些必须注意其名称不能和其他连接所采用的名称相同
不论创建的是本地临时存储过程还是全局临时存储过程,只要SQL Server2005一停止运行,它们将不复存在;

四(远程存储过程)
在SQL Server2005 中,远程存储过程(Remote Stored Proceres)是位于远程服务器上的存储过程,通常可以使用分布式查询和 excute 命令执行一个远程存储过程;

五(扩展存储过程)
扩展存储过程(Extended Stored Proceres)是用户可以使用外部程序语言编写的存储过程,通过扩展存储过程可以弥补SQL Server2005的不足,它在使用和执行上与一般的存储过程完全相同;可以将参数传递给扩展存储过程,扩展存储过程也能够返回结果和状态值;
为了区别扩展存储过程的名称通常以xp_开头,扩展存储过程是以动态链接库(DLLS)的形式存在,能让SQL Server2005动态地装载和执行,扩展存储过程一定要存储在系统数据库 master 中

存储过程的优点
(1) 通过本地存储、代码预编译和缓存技术实现高性能的数据操作
(2) 通过用编程结构和过程实现编程框架;如果业务规则发生变化,可以通过修改存储过程来适应新的业务规则,而不必修改客户端的应用程 序,这样所有调用该存储过程的应用程序就会遵循新的业务规则;
(3) 通过隔离和加密的方法提高数据库的安全性。数据库可以通过得到权限来执行存储过程,而不必给予用户直接访问数据库对象的权限,这 些对象交收存储过程来执行操作,另外,存储过程可以加密,这样用户就无法阅读存储过程中的T-sql语句。这样做将数据库的结构和数 据库用户隔离开来,时一步保证数据的完整性和可靠性;

存储过程与视图的比较
(1) 可以在单个存储过程执行一系列T-SQL 语句,而在视图中只能是 select 语句
(2) 视图不能接受参数,只能返回结果集;而存储过程可以接受参数,包括输入,输出参数,并能返回单个或多个结果集以及返回值,这样可 大大地提高应用的灵活性;
一般来说,人们将经常用到的多个表的连接查询定义为视图,而存储过程完成复杂的一第列的处理,在存储过程中也会经常用到视图;

创建存储过程
CREATE PROCEDURE procere_name
[WITH ENCRYPTION]
[WITH RECOMPILE]
AS
Sql_statement

其中 with encryption 对存储过程进行加密; with recompile 对存储过程重新编译
例如:使用T-SQL 语句在book数据库中创建一个名为p_book1的存储过程 该存储过程返回book1表中所有出版社为"中国长安"的记录
USE book
GO
CREATE PROCEDURE p_book1
AS
SELECT * FROM book1 WHERE 出版社='中国长安'

执行存储过程

存储过程创建成功后,用户可以执行存储过程来检查存储过程的返回结果;基本语法如下:
exec procere_name
例如:使用T-SQL语句执行上面创建的存储过程 运行命令如下:
USE book
GO
exec p_book1
在运行完毕后,在SQL-Server ManagementStudio 查询窗口中返回的结果
存储过程创建成功后可以在 SQL-Server ManagementStudio 窗口中下查看存储过程的属性
例如:在 SQL-Server ManagementStudio 窗口中查看存储过程 p_book1 的属性:
对象资源管理器-> 展开book选项-> 展开可编程性-> 右击 p_book1选择修改命令 就可以修改存储过程命令属性

带参数的存储过程

由于视图没有提供参数,对于行的筛选取只能绑定在视图中定义,灵活性不大,而存储过程提供了参数,大大提高了系统开发的灵活性
向存储过程设定输入、输出参数主要目的是通过参数向存储过程输入和输出信息来扩展存储过程的功能,能过设定能数,可以多次使用同一存储过程并按要求查找所需要的结果;

1、带输入参数的存储过程
输入参数是指由调用程序向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行存储过程中给出相应的变量值,为了定义输入参数存储过程,需要在 create procere 语句中声明一个或多个变量作为参数;其语法格式如下:
CREATE PROCEDURE procerd_name
@parameter_name datatype=[default]
[with encryption]
[with recompile]
AS
Sql_statement

其中各项参数如下
(1) @parameter_name: 存储过程的参数名称,必须以符号@为前缀
(2) Datatype: 参数的数据类型
(3) Default: 参数的默认值,如果执行存储过程时未提供该参数的变量值,则使用default值

例子:使用T-SQL语句在book数据表中创建一个名为p_book1p的存储过程,该存储过程能根据给定的出版社回该出版社代码对应的book1表中的的记录:

分析:直接把上面的例子最后面的SQL语句 select * from book1 where 出版社='中国长安' 将里面的 “出版社='中国长安'”用变理代替为 select * from book1 where 出版社= @出版社 其中变量名 @出版社取了代值 '中国长安';由于使用了变量,所以需要定义该变量,我们把“出版社”的长度设为是20位字符串;所以在 AS 之前定义变更@出版社 varchar(20);

create procere p_book1p
@出版社 varchar(20)
AS
SELECT * FROM book1 WHERE 出版社=@出版社

执行含有输入参数的存储过程
1)使用参数名传递参数值
在执行存储过程的语句中通过语句 @paramter_name=value 给出参数的传递值,当存储过程含有多个参数时,参数值可以任意顺序设定,对于允许空值和具有默认值的输入参数可以不给出参数的传递值;其格式语法如下:
exec procere_name
[@paramenter_name=value]
[,....n]
例子:用参数名传递参数值的方法执行存储过程p_book1p,分别查出出版社为'中国长安'和"安徽人民"书的记录
exec p_book1p @出版社='中国长安'
go
exec p_book1p @出版社='安徽人民'
go

2) 按位置传递参数值
在执行存储过程的语句中,不通过参数传递值面直接给出参数的传递值,当存储过程含有多个输入参数时,传递值的顺序必须与存储过程中定义的输入参数顺序相一致,按位置传递参数时,也可以忽略空值和具有默认值的参数,但不能因此破坏输入参数的设定顺序;比如:在一个含有4个参数的存储过程中,用户可以忽略第3和第四个参数,但无法在忽略第3个的情况下而指定第4个参数的输入值;
语法格式如下:
exec procere_name
[value1,value2,....]

例子:用按位置传递参数值的方法执行存储过程 p_book1p 分别查找出版社为“中国人口”和“内蒙人民”书的记录
exec p_book1p '内蒙人民'
go
exec p_book1p '中国人口'
go

按位置传递参数值比按参数名传递参数值更简捷比较适合参数值较少的情况,而按照参数名传递的方法使程序的可读性增强,特别是参数数量较多时,建议用按参数名传递参数的方法,这样的程序可读性/可维护性都要好一些;

3) 带输出参数的存储过程
如果需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来实现,为了使用输出参数,需要在
create procere 语句中指定 output 关键字 输出语法如下: @parameter_name datatype=[defautl] OUTPUT
例如:创建存储过程 p_book1Num 要求能根据用户给定的出版社,统计该出版社的出书数量,并将数量以输入变量的形式返回给用户:
CREATE PROCEDURE p_bookNum
@出版社 var(20),@bookNum smallint output
AS
SET @BOOK1Num= --(这个里面是给book1Num 赋值)
(
select count(*) from book1
where 出版社=@出版社
)
ptrint @book1Num

执行存储过程p_book1Num
由于在存储过程 p_book1Num 中使用了参数@出版社和@book1Num 所以在测试时需要先定义相应的变量,对于输入参数@出版社需要赋值,而输出参数 @book1Num 无需赋值,它是从存储过程中获得返回值供用户进一步使用的

declare @出版社 varchar(20), @book1Num SMALLINT
set @出版社=“中国长安”
exec p_book1Num @出版社,@book1Num

说明:这里在是sql server2005 环境下进行测试的,而在进行系统开发时,往往变量的定义,赋值,使用都是在应用程序中设计的,存储过程 p_book1Num 的 print @book1Num语句也是为了在 SQL Server2005环境中测试而设计的

删除、修改、重命名存储过程

修改存储过程:是由alert 语句来完成的,语法如下:
ALTER procere procere_name
[with encryption]
[with recompile]
as
Sql_statement
例子:使用T-SQL语句修改存储过程 p_book1p 根据用户提供的出版社名称进行模糊查询并要求加密:

alter procere p_book1p
@出版社 varchar(20)
with encryption
as
select 出版社,ISBN号,定价,作者姓名
from book1,teacher
where book1.编号=teacher.编号 and 出版社 like '%@出版社%'

存储过程的删除:存储过程的删除是通过DROP语句来实现的
例如:使用T-SQL语句来删除存储过程p_book1
use book
go
drop procere p_book1

使用SQL-Server Management Studio窗口删除存储过程 p_book1p:
对象资源管理器-> 展开BOOK-> 展开可编程性-> 右键dbo.p_book1p->删除 就可以了

存储过程重命名:
对象资源管理器-> 展开BOOK-> 展开可编程性-> 右键dbo.p_book1p->重命名

存储过程的重编译处理
在存储过程中所用的查询只在编译时进行优化,对数据库进行索引或其他会影响数据库统计的更改后,可能降低已编译的存储过程的效率,通过对存储过程进行重新编译,可以重新优化查询;
在SQL-Server2005 中有三种方法重新编译的方法:
1) 在创建存储过程时使用 with recompile 子句
with recompile 子句可以指示 sql server2005 不将该存储过程的查询计划保存在缓存中,而是在每次运行时重新编译和优化,并创建新 的查询计划;下面是例子:
use book
go
create procere p_book1p
@出版社 varchar(20)
with recompile
as
select * from book1 where 出版社=@出版社
这种方法并不常用,因为在每次执行存储过程时都要重新编译,在整体上降低了存储过程的执行速度,除非存储过程本身是一个比较复杂,耗时的操作,编译的时间相对于执行存储过程时间少;

2) 在执行存储过程时设定重新编译选项
通过在执行存储过程时设定重新编译,可以让SQL-Server2005在执行存储过程时重新编译该存储过程,在这一次执行后,新的查询计划又被保存在缓存中;基语法格式是:
execute procere_name with recompile
以重新编译的方式执行存储过程p_book1p:
use book
go
execute p_book1p '中国长安'with recompile 此方法一般在存储过程创建后,数据发生了显着变化时使用

3) 通过系统存储过程设定重新编译选择;其语法如下
exec sp_recomplie OBJECT 其中OBJECT 当前数据库中的存储过程,表或视图的名称
例子:执行下面的语句将导致book1表的触发器和存储过程在下次运行时将被重新编译:
exec sp_recompile book

===========================================================================================================================
触发器的创建和管理

概述:在SQL-Server2005数据库系统中,存储过程和触发器都是SQL语句和流程控制语句的集合

===========================================================================================================================

❼ MS sql如何使用存储过程

一、存储过程的概念
T-SQl和C语言一样 ,是一门结构化的语言。
什么是存储过程?
存储过程是SQL查询语句与控制流程语句的预编译集合,并以特定的名称保存在数据库中。存储过程也是数据库对象
分类:
系统存储过程: 以sp_或xp_打头
用户自定义 :以proc_打头
存储过程的优点:
执行速度快 效率高
模块式编程
减少网络流量
提高安全性
二、系统存储过程
SQl server 的系统存储过程保存在master数据库中,且所有命名的系统存储过程命名以“Sp_”开头。在master数据库中,
系统存储过程数量如下:
代码如下 复制代码
select count([name])as '系统存储数量' from sysobjects
where [name] like 'sp_%'

EXECUTE 用来表示调用存储过程,也可以缩写为EXEC,
调用存储的语法如下:
EXECUTE ‘存储过程名’ ‘参数’ ---如果没有参数则省略参数
常用的系统存储过程
EXEC sp_databases 列出当前系统中的数据库
EXEC sp_renamedb 'Northwind','Northwind1' 修改数据库的名称(单用户访问)
USE stuDB GO EXEC sp_tables 返回某个表列的信息
EXEC sp_columns 查看指定列的信息
EXEC sp_help 查看某个表的所有信息
EXEC sp_helpconstraint '表名' 查看某个表的约束
EXEC sp_helpdb '数据库名' 或 EXEC sp_helpdb 查看指定数据库或所有数据库信息
EXEC sp_helptext '对象名称' 显示数据库对象(存储过程、触发器、试图)的定义文本
EXEC sp_helpindex '表名' 查看指定表的索引信息
EXEC sp_renamedb '原名称','新名称' 更改数据库名称
EXEC sp_stored_proceres 列出当前环境可用的所有存储过程

除了系统存储过程,SQL Server 还提供以Xp_开头的扩展存储过程,如可以调用DOS命名的,XP_cmdshell 存储过程
用法如下:

代码如下 复制代码

EXEC Xp_cmdshell DOS 命名 [NO_OUTPUT]


NO_OUTPUT 为可选参数,表示是否输入存储过程返回的信息
三、用户自定义存储过程
1、语法
代码如下 复制代码
create procere 存储过程名
@参数1名 数据类型 [=默认值] [参数类型(输入/输出)]
... ...
@参数n名 数据类型 [=默认值] [参数类型(输入/输出)]
as
begin
sql语句
end;
go

参数类型分为输入参数和输出参数,默认为输入参数,使用OUTPUT表示输出参数。创建存储过程最好以proc开头

2、创建不带参数的存储过程

代码如下 复制代码
--判断存储过程是否存在
if object_id('proc_student','procere') is not null
drop procere proc_student
go
create procere proc_student
as
begin
select pcid as '电脑编号',
case pcuse
when 0 then '空闲'
when 1 then '忙碌'
end as '使用状态' from pc
end;
--调用存储过程
execute proc_student select * from pc
go

3、创建带输入参数的存储过程
语法:
代码如下 复制代码
create procere 存储过程名
@参数1名 数据类型 [=默认值]
....
@参数2名 数据类型[=默认值]
as
SQl与语句
...
go

--例如
--创建带输入参数的存储过程
代码如下 复制代码
if object_id('proc_stu','procere') is not null
drop procere proc_stu
go
create procere proc_stu
@pcuse int
as
begin
select pcid as '电脑编号',
case pcuse
when 0 then '空闲'
when 1 then '忙碌'
end as '使用状态' from pc where pcuse=@pcuse end;
--调用存储过程
execute proc_stu @pcuse=1

4、创建带输出参数的存储过程
代码如下 复制代码
--创建带输出参数的存储过程
if OBJECT_ID('proc_s','procere') is not null
drop procere proc_s
go
create procere proc_s
@pcid int,
@pcus int output
as
begin
select @pcus=pcuse from pc where pcid=@pcid end;
--调用存储过程
declare @pcus int execute proc_s 5,@pcus output


四、处理错误信息
当存储过程的语句十分复杂时,可以在存储过程中加入错误语言。SQL Server中可以使用RAISERROR 返回用户自定义的错误信息。
RAISERROR 语法如下:

RAISERROR (自定义的错误信息,错误的严重级别,错误状态)

自定义错误信息:表示输出信息:表示输出的错误提示文本
错误的严重级别:表示用户自定义错误的严重性级别。(0-18极)
错误的状态:表示自定义错误的状态,值的范围在1-127