存储过程

作者:计算机专家

1.锁

当八个用户同一时候对同叁个数码开展改变时会发生并发难点,使用工作就可以化解这些标题。不过为了以免万一别的客户修改另一个还没产生的事体中的数据,就要求在业务中用到锁。
SQL Server 二零一零提供了三种锁格局:排他锁,分享锁,更新锁,意向锁,键范围锁,框架结构锁和大容积更新锁。
查询sys.dm_tran_locks视图可以迅速理解SQL Server 二〇〇九内的加锁情形。

SELECT * FROM sys.dm_tran_locks;

注:关于锁的知识书中没细讲,将在之后的博客中补充。

目录

积累进程优点

运作T-SQL语句举办编制程序有三种情势,一种是把T-SQL语句全部写在应用程序中,并储存在地头;另一种是把有个别T-SQL语句编写的主次作为存款和储蓄进度存款和储蓄在SQL Server中,独有本地的应用程序调用存款和储蓄进程。大好多技师偏向利用前面一个,原因在于存款和储蓄进度具备以下优点:

  • 一次编写翻译,多次实行。第二次实行有个别进程时,将编写翻译该进度以分明检索数据的最优访谈布置。 借使已经改换的安插仍保存在数据库引擎布署缓存中,则该进程随之实行的操作恐怕再也行使该陈设。
  • 可在应用程序中频仍调用;修改存款和储蓄进度不会影响使用程序源代码。
  • 积攒进程存储在服务中,能够减弱网络流量。举例二个内需数百行T-SQL代码的操作能够透过一条推行存款和储蓄进度代码的语句来调用,而不须要在网络中发送数百行代码。
  • 储存进度可被用作一种安全体制来丰盛利用。能够只授予客户试行存款和储蓄进度的权位,而不授予顾客直接待上访问存款和储蓄进程中关系的表的权杖。那样,客商只可以通过存款和储蓄进程来访问表,并展开个其余操作,进而确认保证了表中多少的平安。选取授权操作设置各样顾客的权杖

2.游标

游标是类似于C语言指针同样的结构,是一种多少访问机制,允许顾客访谈单独的数据行。游标主要由游标结果集和游标地点组成。游标结果集是概念游标的SELECT语句重临行的汇集,游标地方是指向那么些结果集中某一行的指针。
示例1:用游标检索出student表中每行记录
Student表记录如图所示
图片 1
执行下列语句

USE test
DECLARE stu_cursor CURSOR FOR
SELECT * FROM student--声明student表的游标stu
OPEN stu_cursor--打开游标
FETCH NEXT FROM stu_cursor--移动该记录指针
WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的结束信息,=0表示有记录检索成功
BEGIN
FETCH NEXT FROM stu_cursor--游标指针移动到下一条记录
END
CLOSE stu_cursor--关闭游标
DEALLOCATE stu_cursor--释放游标资源

结果如图所示
图片 2

  • 1.应用Transact-SQL语言编制程序
    • 1.1.数额定义语言DDL
    • 1.2.数据操纵语言DML
    • 1.3.数量调整语言DCL
    • 1.4.Transact-SQL语言功底
  • 2.运算符
    • 2.1.算数运算符
    • 2.2.赋值运算符
    • 2.3.位运算符
    • 2.4.相比较运算符
    • 2.5.逻辑运算符
    • 2.6.连接运算符
    • 2.7.一元运算符
    • 2.8.运算符的优先级
  • 3.调节语句
    • 3.1.BEGIN END语句块
    • 3.2.IF ELSE语句块
    • 3.3.CASE分支语句
    • 3.4.WHILE语句
    • 3.5.WAITFO揽胜延缓语句
    • 3.6.RETUCR-VN无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.TKoleosY CATCH错误管理语句
  • 4.常用函数
    • 4.1.数据类型调换函数

仓储过程分类

(1)系统存款和储蓄进度
  SQL Server提供的仓储进度,用于实施与系统相关的职务,首要囤积在master数据库并以sp_为前缀,例如sp_addtype、sp_rename等。

图片 3

(2)扩大存款和储蓄进程
  扩展存款和储蓄进度是以在SQL Server情形之外实行的动态链接库(Dymatic-Link)Libraries,DDL)来贯彻的,实行系统存款和储蓄进度不能够胜任的任务,如发邮件、文件管理等,日常以前缀xp_开头。推行扩张存款和储蓄进度的办法与仓库储存进度的形似。

(3)一时存款和储蓄进程
  临时存款和储蓄进程首先是地点存储进程。SQL Server援救三种一时半刻存款和储蓄进程:局地不时进程和全局不经常进度。
  假诺存款和储蓄进程的前边有一个符号“#”,那么它就是局地一时进度,只可以在二个客商会话中使用,在近年来对话截止时就能被除去。
  假诺存款和储蓄进度的前方有多个记号“##”,那么把该存款和储蓄进程称为全局不常存款和储蓄进程,能够在装有客户会话中应用,在应用该进程的结尾一个会话结束时除了。

(4)客户定义的仓库储存进度
  客户自定义的储存进程由客商创造的一组T-SQL语句会集组成,能够接到和再次回到顾客提供的参数,完毕有些特定效用。
  存款和储蓄进度创立好且语法准确后,系统将储存进程的称号存款和储蓄在近些日子数据库的系统表sysobject中;将积攒进度的公文存款和储蓄在当下数据库的系统表syscomments中。

2.1.游标定义的参数LOCAL和GLOBAL

游标定义参数LOCAL表示该游标只好成效于本次批管理或函数或存款和储蓄进度。游标定义参数GLOBAL表示该游标能够成效于大局。
举办下列语句

DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
GO
OPEN stu_cursor
GO

执行结果如下
图片 4
语句中,注脚了叁个student表的游标stu_cursor,在展开游标时提示游标不设有。因为该游标参数是LOCAL,只好功能于方今批管理语句中,而开发游标语句和申明语句不在一个批管理中。假使去掉第三个GO,使七个语句在同三个批管理中,就会如愿实施不会报错。
实施下列语句

DECLARE stu_cursor1 CURSOR GLOBAL
FOR SELECT * FROM student
GO
OPEN stu_cursor1
GO

实行结果:命令已成功做到
和LOCAL参数相比较,GOLBAL参数设置游标成效于大局,因而OPEN和DECLARE语句不在同多少个批管理中依旧能够成功进行。

1.使用Transact-SQL语言编制程序

即使SQL Server 二〇〇九提供了图形化分界面,但唯有一种Transact-SQL语言能够直接与数据库引擎举办互动。根据施行效果特色能够将Transact-SQL语言分成3大类:数据定义语言DDL,数据垄断(monopoly)语言DML,数据调控语言DCL。

创办存款和储蓄进程

储存进度语法如下:

CREATE PROCEDURE|PROC [schema_name.] procedure_name
    -- Add the parameters for the stored procedure here
    [ { @parameter [ type_schema_name. ] data_type }  
        [ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]  
    ] [ ,...n ]   
    [WITH <procedure_option> [ ,...n ]]
    [FOR REPLICATION]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

<procedure_option> ::=   
    [ ENCRYPTION ]  
    [ RECOMPILE ]  
    [ EXECUTE AS Clause ]  
  • schema_name:该进程所属的架构的名目。假诺在开立进度时未钦定架构名称,则自动分配正在开创进度的顾客的暗许架构。
  • 可以经过动用二个#符号在procedure_name从前创制本地临时进程(#procedure_name)或两个#标志创制全局有时进程(## procedure_name) 。局地有时程序仅对创造了它的三回九转可知,并且在关门该连接后将被删除。 全局有时程序可用以全部连接,并且在利用该进程的结尾几个会话结束时将被删去。
  • @parameter:内定进程中的参数,是一对的,可以声爱他美(Karicare)个或七个。
  • 设若内定了FOEnclave REPLICATION,则不可能评释参数。
  • parameter能够是输入参数or输出参数,若为输入参数IN能够不写,系统暗许;若为输出参数则要增添OUTPUT。
  • 表值参数只可以是 INPUT 参数,何况这一个参数必得含有 READONLY 关键字。
  • 光标数据类型只好是出口参数和必得附带由 VALX570YING 关键字。
  • OUT | OUTPUT指示参数是出口参数,使用 OUTPUT 参数将值再次回到给进程的调用方。
  • [ =default ]:参数的私下认可值。 假若默确定义值,该函数能够试行而没有要求点名该参数的值。
  • WITH ENC安德拉YPTION:SQL Server加密syscomments表中含有CREATE PROCEDURE语句文本的条文,即对顾客隐蔽存款和储蓄进度的公文,不能够从syscomments表中获取该存款和储蓄进度的新闻。
  • WITH RECOMPILE:提示数据库引擎不缓存该进度的计划,该进度就要每一回运营时再度编写翻译。要是钦赐了FOLANDREPLICATION,则不能够运用此选项。
  • EXECUTE AS子句:内定在中间实行进程的安全上下文。

至于参数

  • 存款和储蓄进程参数也得以分包暗许值,如:
create procedure pun_info @pubname varchar(20)='ALGOdata'
  • 仓库储存进度参数能够分包通配符,如:
create procedure pun_info 
   @name varchar(20)='D%'
as
  select name from authors where name like @name

关于出口
①OUTPUT参数
  假使在进程定义中为参数钦定 OUTPUT 关键字,则存储进度在剥离时可将该参数的前段时间值重临至调用程序。若要用变量保存参数值以便在调用程序中选取,则调用程序必得在奉行存款和储蓄进度时行使 OUTPUT 关键字。
  也得以在实践进程时为 OUTPUT 参数钦赐输入值。 那将允许进程从调用程序接收值,使用该值更换或实行操作,然后将新值重返给调用程序。
②采用再次来到代码再次来到数据
  进程能够回到三个整数值(称为“重回代码”),以提醒进程的实长势况。 使用 RETUEnclaveN 语句内定进度的回到代码。 与 OUTPUT 参数同样,施行进程时必须将回到代码保存到变量中,技术在调用程序中运用再次回到代码值。
  RETU本田UR-VN是从查询或进程中无条件退出,不实施位于 RETU奥迪Q3N 事后的话语。RETUENVISIONN重临的不可能是空值,要是经过试图重临空值,将生成警告消息并赶回 0 值。用输出参数OUTPUT能够输出放肆等级次序的结果(不包蕴表类型),而RETU本田CR-VN只好回去整型并且总能重回八个整型值。日常的RETUENVISIONN用来回到重临代码(如0代表实施成功,1象征未钦命所需参数值)。
  RETUTiguanN和OUTPUT还是能够出现在一直以来存款和储蓄进程中,详见示例(3)。

2.2.游标分为游标变量和游标类型

日常来讲列语句

--语句1
DECLARE stu_cursor CURSOR
FOR SELECT * FROM student--声明student表的游标名称为stu_cursor并赋值
GO

--语句2
DECLARE @stu_cursor CURSOR--声明游标类型的变量@stu_cursor
SET @stu_cursor=CURSOR FOR--给该变量赋值
SELECT * FROM student

在语句第11中学一直注脚了三个游标并赋值,而语句第22中学宣称了游标类型的变量@stu_cursor,然后给该变量赋值。这两个是例外的。

1.1.数目定义语言DDL

是最基础的Transact-SQL语言类型,用来创建数据库和创制,修改,删除数据库中的各个对象,为别的语言的操作提供对象。例如数据库,表,触发器,存款和储蓄进程,视图,函数,索引,类型及顾客等都是数据库中的对象。常见的DDL语句包蕴

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表

受制与限定

①在单个批管理中,CREATE PROCEDURE 语句无法与别的 Transact-SQL 语句组合使用。
②以下语句不可能用于存款和储蓄进程主体中的任哪儿方。

图片 5

③经过可以引用尚空中楼阁的表。 在成立时,只进行语法检查。 直到首次试行该进程时才对其进展编写翻译。 唯有在编写翻译进度中才分析进程中引用的具有指标。 由此,若是语法正确的进程引用了子虚乌有的表,则还是可以成功开创;但假设被引述的表不设有,则经过就要实行时将战败。
④无法将某一函数名称钦点为参数暗许值也许在推行进程时传递给参数的值。 不过,您能够将函数作为变量传递,如以下示例中所示:

-- Passing the function value as a variable.  
DECLARE @CheckDate datetime = GETDATE();  
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;   

⑤要是该进度对 SQL Server 的中距离实例举办转移,将不只怕回滚那一个退换。 远程进度不到场业务。

2.3.游标参数FO揽胜WA逍客D_ONLY和SCROLL

FORWARD_ONLY参数设置游标只可以从结果集的最初向停止方向读取,使用FETCH语句时只好用NEXT,而SCROLL参数设置游标能够从结果集的随机方向,任意地点移动。如下列语句

--语句1,默认FORWARD_ONLY
DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
GO
--语句2,FORWARD_ONLY参数,FETCH时只能从开始往结束方向
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT * FROM student
OPEN stu_cursor 
FETCH NEXT FROM stu_cursor
GO
--语句3,SCROLL参数,FETCH时可以从任意位置往任意方向
DECLARE stu_cursor CURSOR SCROLL LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH LAST FROM stu_cursor
GO

1.2.数据垄断(monopoly)语言DML

是用来操纵表和视图中的数据的口舌,比方查询数据(SELECT),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

施行存款和储蓄进度

调用存款和储蓄进度使用Execute|Exec关键字,无法大致。

Execute|Exec
{
  [@整形变量=]
  存储过程名[,n]|@存储过程变量名
  [[@过程参数=]参数值|@可变参数名 [OUTPUT]|[DEFAULT]]
  [,..,n]
  [WITH RECOMPILE]
}
  • @整形变量:可选,代表存款和储蓄进度的回来状态。
  • n:可选,用于对同名的历程分组。
  • @进程参数:为存储进度的参数赋值。

SQL Server提供了三种传递参数的章程:
(1)按岗位传递参数,即传送的参数和概念时的参数顺序一致,如:
execute au_info 'Dull','Ann'
(2)通过参数名传递,采取“参数=值”的花样,此时相继参数能够轻巧排序,如:
execute au_info @firstName='Dull',@lastName='Ann' 或
execute au_info @lastName='Ann',@firstName='Dull'

  • OUTPUT:钦赐该参数为出口参数。
  • DEFAULT:指明该参数使用私下认可值。要是该参数定义时并未有一些名默许值,则不可能利用DEFAULT选项。
  • WITH RECOMPILE:强制在执行存款和储蓄进程时再也对其举办编写翻译。

【示例】
(1)带OUTPUT参数的储存进度——最后的重临值存款和储蓄在调用程序注明的OUTPUT变量中

create procedure Query_Relationer
   @QueryCID int,                   -- 输入的形参
   @QueryRName varchar(20) OUTPUT   -- 输出的形参
as
begin
  if exists(select rid from Customer where cid = @QueryCID)
    select @QueryRName = RName from Relationer
    where rid = (select rid from Customer where cid = @QueryCID and cStatus = 1)
  else
    set @QueryRName = '不存在'
end
go

调用进程如下:

declare @Relationer_name varchar(20),@Cust_ID int
execute Query_Relationer @Cust_ID=20103530,@Relationer_name OUTPUT
print '客户ID为'+convert(char(8),@Cust_ID)+'的联系人是:'+@Relationer_name

(2)带Return参数的积存进程

create proc up_user
as
delcare @age int
begin
  select @age=uage from user
  return @age
end

(3)同偶然候带Return和output参数的囤积进程

create proc up_user
@id int,
@name varchar(20) output
as
 declare @age int
 begin
  select @age=stuage,@name=stuname from stuinfo where uid=@id
  return @age
 end

调用进度如下:

declare @age int
declare @name varchar(20)
exec @age=up_user 2,@name output
-- 输出age和name
select @age,@name

2.4.游标的简练利用

示例2:将student表中stu_enter_score大于600分的学员都减去100分
Student表中的数据如图所示
图片 6
试行下列语句

--游标的简单应用
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=600
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
GO

结果如图所示
图片 7

1.3.数码调控语言DCL

论及到权力管理的语言称为数据调整语言,首要用来施行有关安全管理的操作。如授予权限(GRANT),收回权限(REVOKE),拒绝授予主体权限,并防范主体通过组或剧中人物成员持续权限(DENY

仓库储存进度传递集合参数以及重回、接收结果集

(1)传递集结参数

A、传递多少个形参

B、使用表值参数
  使用表值参数类型将多少个行插入表中。 一下演示将开创参数类型,注解表变量来引用它,填充参数列表,然后将值传递给存款和储蓄进度。 存款和储蓄进度使用这个值将四个行插入表中。

/* Create a table type. */  
CREATE TYPE LocationTableType AS TABLE   
( LocationName VARCHAR(50)  
, CostRate INT );  
GO  

/* Create a procedure to receive data for the table-valued parameter. */  
CREATE PROCEDURE usp_InsertProductionLocation  
    @TVP LocationTableType READONLY  
    AS   
    SET NOCOUNT ON  
    INSERT INTO [AdventureWorks2012].[Production].[Location]  
           ([Name]  
           ,[CostRate]  
           ,[Availability]  
           ,[ModifiedDate])  
        SELECT *, 0, GETDATE()  
        FROM  @TVP;  
GO  

/* Declare a variable that references the type. */  
DECLARE @LocationTVP   
AS LocationTableType;  

/* Add data to the table variable. */  
INSERT INTO @LocationTVP (LocationName, CostRate)  
    SELECT [Name], 0.00  
    FROM   
    [AdventureWorks2012].[Person].[StateProvince];  

/* Pass the table variable data to a stored procedure. */  
EXEC usp_InsertProductionLocation @LocationTVP;  
GO  

(2)再次回到结果集

A、使用 OUTPUT 游标参数
  以下示例使用 OUTPUT 游标参数将经过的部分游标传递回实施调用的批管理、进度或触发器。
  首先,创建在 Currency表上声称并开辟三个游标的历程:

IF OBJECT_ID ( 'dbo.uspCurrencyCursor', 'P' ) IS NOT NULL  
    DROP PROCEDURE dbo.uspCurrencyCursor;  
GO  
CREATE PROCEDURE dbo.uspCurrencyCursor   
    @CurrencyCursor CURSOR VARYING OUTPUT  
AS  
    SET NOCOUNT ON;  
    SET @CurrencyCursor = CURSOR  
    FORWARD_ONLY STATIC FOR  
      SELECT CurrencyCode, Name  
      FROM Sales.Currency;  
    OPEN @CurrencyCursor;  
GO  

接下去,运营以下批管理:声美赞臣(Meadjohnson)个有的游标变量,实施上述进程以将游标赋值给一些变量,然后从该游标提取行。

DECLARE @MyCursor CURSOR;  
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;  
WHILE (@@FETCH_STATUS = 0)  
BEGIN;  
     FETCH NEXT FROM @MyCursor;  
END;  
CLOSE @MyCursor;  
DEALLOCATE @MyCursor;  
GO  

B、使用OUTPUT重返多少个出口参数
  这种方法短处在于一旦结果聚焦几百个要素,那么在仓库储存进度就要注脚几百个变量,十三分烦劳。

CREATE PROCEDURE Student.singS
      @id int,
      @name varchar(20) OUTPUT,
      @age int OUTPUT
AS
   select name,age from Student where id=@id
GO

调用段:

DECLARE @name varchar(20),@age int
EXECUTE Student.singS 28, @name OUTPUT,@age OUTPUT
print '学生的姓名为:'+@name+',年龄为:'+@age

C、SELECT重回结果集
  在蕴藏进度中写一段重回贰个结出集的SELECT语句,尽管在调用段中仅仅EXEC procedure_name [parameter1...parametern],那么该SELECT语句的结果唯有只会输出到荧屏上,而不能用那几个结果集做持续管理。假使要封存此结果集,只有一种办法,即经过应用 INSERT/EXEC 将其储存到永恒表、有的时候表或表变量中,进而将结果流式管理到磁盘。

①把结果集存款和储蓄在临时表
开创存款和储蓄进程:

CREATE PROCEDURE Proc1
 @a varchar(50)
AS
 SELECT id,name FROM Table1 WHERE name=@a

调用段:

-- 创建一个临时表,和存储过程的结果集结构一致
CREATE TABLE #t1
(
  id int,
  name varchar(50)
)

-- 把结果集插入临时表中
INSERT INTO #t1 EXEC Proc1 'Ada'
-- do something with results
--用完之后要把临时表清空
DROP TABLE #t1

②把结果集存款和储蓄在表变量
  但这种格局在查询的数据量非常的大的情状下相比较影响属性,查询速度相当慢,在数据量极小的景况下这种差别并不显著。

create proc proc1 as
   select col1 from dbo.table1;

create proc proc2 as
   declare @t table(col1 int);
   insert @t (col1) exec proc1;
   -- do something with results

3.仓库储存进度

仓库储存进度是一组用于完结一定功效的语句集,经过编写翻译后存款和储蓄在数据库中。在SQL Server 二零零六中,既可以够用T-SQL编写存款和储蓄进程,也足以用CL凯雷德编写存款和储蓄进程。

1.4.Transact-SQL语言基础

管住存款和储蓄进程

①翻看存款和储蓄进程音讯

图片 8

②改变存款和储蓄进度

ALTER PROCEDURE|PROC [schema_name.] procedure_name
    -- Add the parameters for the stored procedure here
    [ { @parameter [ type_schema_name. ] data_type }  
        [ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]  
    ] [ ,...n ]   
    [WITH <procedure_option> [ ,...n ]]
    [FOR REPLICATION]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

<procedure_option> ::=   
    [ ENCRYPTION ]  
    [ RECOMPILE ]  
    [ EXECUTE AS Clause ]

③删减存储进度

DROP { PROC | PROCEDURE } [ IF EXISTS ] { [ schema_name. ] procedure } [ ,...n ]  

3.1.客户定义的积攒进程

该种存款和储蓄进程是指封装了可选拔代码的模块大概经过,有2种档次:T-SQL存款和储蓄进程和CLHeritage EV存款和储蓄进程。
T-SQL存款和储蓄进程是指保存的T-SQL语句集合
CLHighlander存款和储蓄进度是指对Microsoft .NET Framework公共语言运营时(CLEvoque)方法的引用

1.4.1.常量与变量

常量相当少说。在SQL Server 二零一零中,存在二种变量。一种是系统定义和保养的全局变量,一种是顾客定义用来保存中间结果的有个别变量。

3.2.扩大存储过程

强大存款和储蓄进度是指能够动态加载和平运动行的DLL,允许利用编制程序语言(如C语言)成立和睦的外表例程。扩张存款和储蓄进程一直在SQL Server 二零零六的实例的地点空间中运作,能够运用SQL Server扩张存款和储蓄进程API达成编制程序。

1.4.1.1.连串全局变量

系统全局变量分为两大类,一类是与自然SQL Server连接或与当下管理有关的全局变量,如@@Rowcount代表方今一个话语影响的行数。@@error代表保留近些日子施行操作的谬误状态。一类是与整个SQL Server系统有关的全局变量,如@@Version代表近些日子SQL Server的版本音信。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
图片 9

3.3.系统存款和储蓄进程

系统存储进程是指积存在源数据库中,以sp伊始的存放进程,出现在每种系统定义数据库和顾客定义数据库的sys架构中。

1.4.1.2.局地变量

有个别变量能够具有一定数据类型,有自然的效能域,平日用来充作计数器总结或调整循环实行次数,或许用于保存数据值。局部变量前独有1个@符,用DECLARE语句评释局地变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
图片 10

本文由杏彩发布,转载请注明来源

关键词: